Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
稍后通过JavaScript访问文档中的HTML元素_Javascript_Html_Innerhtml - Fatal编程技术网

稍后通过JavaScript访问文档中的HTML元素

稍后通过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

我刚开始使用JavaScript,我有一个简单的代码,它向id为p的元素发送一个值。我目前正在文档元素中的中声明此函数

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大量使用异步执行的回调函数。在元素存在之前声明函数不是问题。声明命名函数是非常好的-你说它会立即得到评估是什么意思?该函数肯定不会在此时被调用。