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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM