我一直在尋找附着DOM事件避免了瀏覽器兼容性問題的最適當的方式,發現Mozilla developers網站指出:事件處理程序設置爲DOM對象
老的方法是隻給它分配是這樣的:
document.getElementById('cupcakeButton').onclick = getACupcake;
如上所述,事件對象是全局或一個參數。這種方法可能有問題,並不是首選的方法,但它仍然是 的作品,很多人仍然使用它。
什麼類型的問題,這是否是指什麼?
我一直在尋找附着DOM事件避免了瀏覽器兼容性問題的最適當的方式,發現Mozilla developers網站指出:事件處理程序設置爲DOM對象
老的方法是隻給它分配是這樣的:
document.getElementById('cupcakeButton').onclick = getACupcake;
如上所述,事件對象是全局或一個參數。這種方法可能有問題,並不是首選的方法,但它仍然是 的作品,很多人仍然使用它。
什麼類型的問題,這是否是指什麼?
最明顯的是已經提到,it would replace a previously assigned handler。
document.getElementById('id')
應該可以在所有瀏覽器中工作,除非在真正的舊瀏覽器中(Netscape 4-
, IE 4-
),那麼您應該分別使用document.layers['id']
和document.all[id]
。
IE 5 up to IE 7
have one more issue,這就是說它們也會返回元素name='id'
而不是隻有元素id='id'
。這可能真的讓你感到厭煩。
看一看jQuery一種方式附加DOM事件處理程序,避免瀏覽器兼容性問題。
我能想到的最大的問題是,它不會允許這樣做的另一個.onclick = fn;
你基本上解除綁定以前的處理程序,如果它在那裏分配多個點擊處理。
即使奇蹟般地工作,你就沒有辦法註銷一個特定的處理程序;這是全部或沒有。
其一,如果您嘗試兩個處理程序連接到相同的元素相同的事件,第二個將替換第一個。通常的期望是一個事件可能有許多處理程序。當你將這兩種方法結合起來時,會發生什麼,但也不是很明顯。 (即,「分配」一個處理程序替換之前的「已添加」的程序嗎?它們是否都被調用?是否可以「移除」已分配的處理程序?我確定所有這些都是指定的,但最好是堅持一種方法而不是保持在你的腦海裏。) – millimoose 2013-05-13 21:45:44
我建議閱讀http://www.quirksmode.org/js/events_tradmod.html。它也提到了一些問題。 – 2013-05-13 22:02:46