Javascript GetElementById在使用window.onload时返回null,但在从控制台运行时不返回null
我试图在我的网站中按id查找div,但当我从window.onload调用getElementById时,返回了null。我已经验证了我正在寻找的元素是否存在,并且它没有与任何其他元素共享Id 奇怪的是,当我从chrome的开发者工具运行一个控制台命令时,div会按原样返回 我已经提供了一个指向JSFIDLE上的简化版本的链接,以及我正在尝试的内容的简要展示,非常感谢各位优秀人士提供的任何意见Javascript GetElementById在使用window.onload时返回null,但在从控制台运行时不返回null,javascript,html,Javascript,Html,我试图在我的网站中按id查找div,但当我从window.onload调用getElementById时,返回了null。我已经验证了我正在寻找的元素是否存在,并且它没有与任何其他元素共享Id 奇怪的是,当我从chrome的开发者工具运行一个控制台命令时,div会按原样返回 我已经提供了一个指向JSFIDLE上的简化版本的链接,以及我正在尝试的内容的简要展示,非常感谢各位优秀人士提供的任何意见 <script> var hasElement = document.getEle
<script>
var hasElement = document.getElementById('someId');
alert(hasElement);
</script>
<div id="someId">true</div>
var haseElement=document.getElementById('someId');
警报(HASSELEMENT);
真的
问题是您需要更改此选项:
window.onload=urlFinder();
为此:
window.onload=urlFinder;
或者,您可以在相关HTML之后的
之前调用函数
您正在立即调用函数,然后将返回结果分配给window.onload
,而不是将函数引用分配给window.onload
。记住,无论何时使用()
,都意味着现在就执行它。任何时候只要指定函数名,就意味着为函数指定一个引用,稍后当某人选择对变量应用()
时,可以调用该函数
另外,您的JSFIDLE不是有效的测试,因为整个FIDLE设置为等待window.onload(在左上角)触发,这可能会让您更加困惑
这里是JSFIDLE的固定版本(您在一些代码中也有JS错误):您试图获取的DOM元素还不存在
您试图在div写入页面之前获取它。脚本标记将立即执行,除非您明确告诉它等待
您有两个选择:
将脚本放在HTML之后
true
var haseElement=document.getElementById('someId');
警报(HASSELEMENT);
告诉脚本在加载事件上执行
使用基本Javascript
window.onload=函数(){
var haseElement=document.getElementById('someId');
警报(HASSELEMENT);
}
真的
…或使用jQuery
$(文档).ready(函数(){
var hasElement=$(“#someId”);
警报(HASSELEMENT);
});
真的
更新:
或者,在大多数现代浏览器中,可以使用on the script标记来避免默认的同步阻塞行为
关于控制台:
控制台将在对象的最后一个状态记录对该对象的引用,而不是在脚本中调用该对象时的状态。有关说明,请参阅本文:这不在window.onload中,您也可以在小提琴中使用window.onload=urlFinder()
将onload设置为返回urlFinder函数,而不是函数本身。您的小提琴已经设置为运行在onload事件中输入的javascript,请参见jsfiddle站点窗口左侧的设置。onload=urlFinder()代码>应该是窗口。onload=urlFinder代码>你不想调用函数,你只想设置它。事实证明这就是我想要的。我仍然需要在window.onload上运行函数,但我遇到的问题是当它运行div时还不存在。谢谢你们的帮助。谢谢你们的固定小提琴,也谢谢你们启发我window.onload是如何工作的。事实证明,我只需要在页脚而不是页眉中调用函数,它就可以工作了。
<div id="someId">true</div>
<script>
var hasElement = document.getElementById('someId');
alert(hasElement);
</script>
<script>
window.onload = function(){
var hasElement = document.getElementById('someId');
alert(hasElement);
}
</script>
<div id="someId">true</div>
<script>
$(document).ready(function(){
var hasElement = $('#someId');
alert(hasElement);
});
</script>
<div id="someId">true</div>