這個問題是如此基本,我肯定在東西,即使我已經looked for something similar重複。Javascript:最好的地方註冊事件處理程序
我的問題基本上是:最初爲HTML元素註冊事件處理程序的最佳位置在哪裏?
註冊的事件處理程序最簡單的辦法顯然是隻是做內聯:
<div id = "mybutton" onclick = "doSomething()">Click me</div>
但這就違背了朝現代網絡的發展邏輯和內容分離壓倒性的遊行。因此,在2012年,所有的邏輯/行爲都應該在純Javascript代碼中完成。這很好,並且會導致更多可維護的代碼。但你仍然需要一些初始的鉤子,用你的Javascript代碼來連接你的HTML元素。
通常情況下,我只是這樣做:
<body onload = "registerAllEventHandlers()">
不過...。那仍是「欺騙」,是不是 - 因爲我們仍然使用內嵌的JavaScript在這裏。但我們還有其他的選擇嗎?我們不能做到這一點在<head>
節一<script>
標籤,因爲在這一點上,我們不能訪問DOM,因爲在頁面尚未加載:
<head>
<script type = "text/javascript">
var myButton = document.getElementById("mybutton"); // myButton is null!
</script>
</head>
難道我們放置<script>
標籤在底部的網頁或東西?像:
<html>
<body>
...
...
<script type = "text/javascript">
registerAllEventHandlers();
</script>
</body>
</html>
這裏的最佳做法是什麼?
-1:'window.onload'事件不等同於使用jQuery的'ready'事件:'window.onload'將在頁面加載完成時觸發,包括所有外部資源(圖像,CSS等)在HTML完成加載之後但在外部資源之前,jQuery的'ready'事件將觸發。使用'window.onload'是一個壞主意,因爲在很多情況下(很多圖像,連接速度慢等),JavaScript事件很長一段時間不會被註冊。 – georgebrock
@slebetman:你能否詳細說明爲什麼在加載圖像(等)之前附加JS事件處理程序是愚蠢的,並且理解兩種不同技術之間的區別?在一個旨在學習和分享信息的網站上,評論說「這很愚蠢」並不是很有建設性。 – georgebrock