Uncaught TypeError: Cannot read property 'value' of null
这告诉您,当代码运行时,这些元素中至少有一个不存在,因此
getElementById
退货
null
,你正试图阅读
value
财产从。
getElementById
将
只有
返回
无效的
如果在您调用文档时,文档中不存在具有给定ID的元素。一般来说,元素不存在的原因分为以下几类:
-
打电话
getElementById
太早了
-
错过了
id
(例如,拼写错误)
-
使用a
name
而不是a
身份证件
-
元素存在,但不在文档中
(罕见)
在你的例子中,由于这是点击按钮,它可能是#2或#3。通过查看错误标识的行,或者使用浏览器的调试器逐语句遍历代码,您可以看到它对哪个ID不满意。
让我们看看每个类别:
1.呼叫
getElementById
太早了
一个常见的错误是进行代码调用
getElementById
在一个
script
阻止那
之前
HTML中的元素,如下所示:
<script>
document.getElementById("foo").innerHTML = "bar";
</script>
<div id="foo"></div>
该代码运行时,该元素不存在。
解决
:
-
移动
脚本
到HTML的末尾,就在结束之前
</body.
标签
-
请致电
getElementById
在回调中,例如在
DOMContentLoaded
事件或按钮点击等。
不要
使用
window.onload
或
<body onload="...">
除非你真的想等到
全部的
外部资源(包括所有图像)已加载。
2.拼写错误
身份证件
这真的很常见,使用
getElementById("ofo")
当元素定义为
id="foo"
.
例子:
<div id="foo"></div>
<script>
document.getElementById("ofo").innerHTML = "I'm foo";
</script>
解决方案
:使用正确的ID。:-)
3.使用a
名称
而不是a
身份证件
getElementById("foo")
查找具有以下内容的元素
id=“foo”
,
不
具有
name="foo"
.
名称
!=
身份证件
.
例子:
<input name="foo" type="text">
<script>
document.getElementById("foo").value = "I'm foo";
</script>
解决方案
:使用
身份证件
,不
名称
.:-)(或使用以下命令查找元素
document.querySelector('[name="foo"]')
.)
4.元素存在,但不在文档中
getElementById
看
在文件中
对于元素。因此,如果元素已经
创建
,但未添加到文档中的任何位置,它将找不到它。
例子:
var div = document.createElement("div");
div.id = "foo";
console.log(document.getElementById("foo"));
它不会查看整个内存,它只会查看文档(特别是您调用它的文档;例如,不同的框架有不同的文档)。
解决方案:
确保元素在文档中;也许你在创建后忘了附加它?(但在上面的例子中,你已经有了对它的引用,所以你不需要
getElementById
)