稍后通过JavaScript访问文档中的HTML元素
我刚开始使用JavaScript,我有一个简单的代码,它向id为p的元素发送一个值。我目前正在文档元素中的中声明此函数稍后通过JavaScript访问文档中的HTML元素,javascript,html,innerhtml,Javascript,Html,Innerhtml,我刚开始使用JavaScript,我有一个简单的代码,它向id为p的元素发送一个值。我目前正在文档元素中的中声明此函数 function writeP(resultSet) { document.getElementById('p').innerHTML = resultSet.length; }; writeP(results); 当我在元素中列出并运行网页时,firebug向我抛出这个错误:TypeError:document.getElementById
function writeP(resultSet) {
document.getElementById('p').innerHTML = resultSet.length;
};
writeP(results);
当我在元素中列出并运行网页时,firebug向我抛出这个错误:TypeError:document.getElementById。。。是空的
但是,如果我将代码块移动到元素下面的标记中,然后重新加载网页,则不会出现问题,脚本也会正常工作。这有什么原因吗?我有什么方法可以让它工作起来,这样我就不必在元素下定义我的函数,或者在body元素上包含onload
感谢您的帮助原因是当您启动js代码时,DOM还没有准备好,js在DOM中找不到这样的元素
在所有元素就绪后,可以使用window.onload触发器启动函数。这与body元素上的onload属性相同,但更清楚,因为您可以在js代码中定义它,而不是在html中 JS以同步方式计算。因此,当您声明函数时,它确实很重要。在本例中,您是在元素实际存在之前声明它的 第二,当你用这种语法声明一个函数时,它会立即得到求值。如果你声明了
var writeP=function(resultSet) {
document.getElementById('p').innerHTML = resultSet.length;
};
您可以将调用保存到文档末尾,并将声明保留在文档末尾
不过,我建议您阅读一些jQuery教程,以了解处理dom操作的更简单方法。没有人再为该任务运行原始JS了
jQuery包含一个对DocumentReady事件的有用调用,它将为您节省大量的麻烦,并且比onload事件更高效。在本例中,您将在代码中的某个地方包含jQuery库
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
然后加上
<script>
jQuery(document).ready(function() {
var writeP=function(resultSet) {
jQuery('#p').html(resultSet.length);
};
writeP(resultSet);
});
</script>
您的文档或外部js文件中的任何位置,只要它适合您。有人愿意告诉我为什么我得到了一个neg?js评估syncronically有一个输入错误,是不正确的。JS大量使用异步执行的回调函数。在元素存在之前声明函数不是问题。声明命名函数是非常好的-你说它会立即得到评估是什么意思?该函数肯定不会在此时被调用。