html加载与脚本运行中,由于html未完全加载而导致脚本找不到dom元素无法执行事件

问题

如题,就是说alert后出现一个对话框,我没有点关闭,其他js文件或html会被加载吗,我遇到一个问题就是在页面加载时调用一个div的click事件,却没有被执行,但是在调用事件前面加上alert('xx');运行后手动关闭提示框click事件就调用成功,为什么,也写了个sleep函数,但不论sleep多久click事件也不会被执行,那我要怎样才能自动调用这个click。

解决方法

将代码包含在onload中,进行(window.onload())加载。

原理

 首先网页接你所编写的代码顺序依次加载,当然有时候也会由于网络原因导致加载成功的顺序有所不同,但基本不会相差太多。

它先加载了你的vote[0],然后这个vote[0]所指向的DOM(也就是你说的DIV)却没有被加载并解析,浏览器这时候还不认识这个vote[0]是个什么东西。

所以,这个时候浏览器会报错这行代码,如果你使用浏览器的F12功能键打开调试器,应该可以看到报错信息。

如果你希望让这段代码加载时直接运行,要考虑执行顺序的问题,要么onload再执行,要么把它放到HTML后面去。

而为什么alert之后就好用了呢?因为alert执行的时候,在等待用户确认的这个过程中,程序是被阻断的,不会向下执行,但是页面的加载过程却不中止,这就相当于页面加载并解析的时间,被alert给留下来了,如果用户的手快,而网络速度很慢的话,同样也会报错,并不执行。

参考页面:http://zhidao.baidu.com/link?url=fYzeXBFJfICTdMUt6-I2UU7VmiBX2-Dz_NEtaQc6-YuG56mfoslMaRORBJtGcZoZPfW_etUF0ckqrHqsgEJp_Ja4O3PCAj8z5zgEkgQHyPK

js在html中的加载执行顺序:http://www.cnblogs.com/lindaWei/archive/2012/04/05/2433454.html    http://www.jb51.net/article/36755.htm

onload和jQuery的$(function(){})的执行: http://lgscofield.iteye.com/blog/1884352

JS和C#方法相互调用:http://www.cnblogs.com/lindaWei/archive/2012/04/05/2433385.html

posted @ 2015-02-05 10:49  Wangyk  阅读(2903)  评论(0编辑  收藏  举报