我脑子里有一个脚本如下:
<script type='text/javascript' src='http://code.jquery.com/jquery-2.1.1.min.js'></script>
<script>
function editdoc(){
document.getElementById("editme").innerHTML = "hello world";
}
$(document).ready(editdoc());
</script>
正文仅包含一个正确命名的div。
现在,当我将此消息传递给浏览器时,Chrome会向我显示Uncaught TypeError: Cannot set property 'innerHTML' of null
错误。
如果我将此脚本移动到正文中,或者使用匿名函数,则不会发生此错误。我认为这意味着在DOM准备好之前正在执行该功能。
This表示命名函数在由$(document).ready调用时应与匿名函数相同。这是怎么回事?
答案 0 :(得分:3)
您正在立即调用您的函数,而不是传递引用。您应该在()
之后editdoc
使用此{<1}}
$(document).ready(editdoc);
您正在做的是立即使用editdoc()
调用该函数并将返回值传递给$(document).ready()
。因此,您观察到函数被立即调用。
任何时候,你将()
放在函数名或定义之后,就是告诉JS解释器现在执行它。如果你只是传递一个函数的名字,那么你传递一个引用(比如一个指针),你传递给它的函数可以在以后执行它,这就是你想要的。
答案 1 :(得分:2)
脚本问题在于您正在执行该功能。它应该是这样的。
你应该改变这个
$(document).ready( editdoc() );
到这个
$(document).ready( editdoc );
答案 2 :(得分:1)
改为:
<script type='text/javascript' src='http://code.jquery.com/jquery-2.1.1.min.js'></script>
<script>
$(document).ready(function() {
function editdoc(){
document.getElementById("editme").innerHTML = "hello world";
}
editdoc();
});
</script>