2016-08-25 86 views
-2

什麼是替換<body onload="init();">的正確的JavaScript方式,因爲我們不再需要支持非常舊的瀏覽器。正確的JavaScript等效<body onload =>

在我的情況下,我想添加一個onClick事件到所有標籤,並希望保持單獨的Javascript到我的HTML頁面。

window.onload = init(); 

開始了與此卻發現全球文檔對象內不可init(),這似乎是這似乎是一個時間問題。它在舊版瀏覽器中效果更好嗎?

document.addEventListener("DOMContentLoaded", init, false); 

似乎是一種更現代的可靠方法,但是這是所有現代瀏覽器都支持的嗎?

然後有一個建議,只是把init()放在頁面的底部,但這顯然回到了讓Javascript直接在HTML中。

<script type="text/javascript">init();</script> 

有沒有一種確定的方法我應該運行我的init代碼?

+3

沒有確定的方法,但爲什麼不只是使用jQuery,它隱藏所有瀏覽器的變化爲你? '$(document).ready(....)'基本上都是jQuery所做的工作,jQuery本身打開了一個比編寫自己的JS東西簡單得多的代碼的整個世界。 –

+1

其實兩者都是錯誤的。 'init()'會立即調用函數,使用函數引用'init'。 (** No'()'**) – Tushar

+0

您的意思是'document.addEventListener(「DOMContentLoaded」,init,false);'? – Rayon

回答

0

我想你想要的是$(function(){})$(document).ready(...),如Marc B提到。這似乎完成了你所要求的,除非我誤解你的問題。 jQuery API支持這一點。

當頁面的文檔對象模型(DOM)變得可以安全操作時,.ready()方法提供了一種運行JavaScript代碼的方法。

0

最簡單的方法是在身體的末尾添加腳本標記具有自調用匿名函數:

<body> 

<!-- content here --> 

<script type="text/javascript"> 
(function() { 
    //Run init code here 
})(); 
</script> 
</body> 


對於外部js文件:

<body> 

<!-- content here --> 

<script src="main.js" type="text/javascript"></script> 
</body> 

main.js文件:

(function() { 
    //Run init code here 
})(); 
+0

這會工作,但我真的想要保持從HTML中的JavaScript是完全可能的。 – NickC

+0

然後將「src」屬性添加到腳本標記中,並將代碼包裝在js文件中的自我調用匿名函數中。 – seahorsepip

-1

現在額外的支架的問題已經解決了,我只是要測試的最終解決方案是:

if (document.addEventListener) { 
 
    document.addEventListener("DOMContentLoaded", init); 
 
} else { 
 
    window.onload = init; 
 
}

我知道的JQuery可以用它的。就緒做到這一點事件,但其中一些頁面是非常小的Ajax內容頁面,如果沒有必要,我寧願避免JQuery的開銷。

相關問題