2013-05-13 61 views
1

我一直在尋找附着DOM事件避免了瀏覽器兼容性問題的最適當的方式,發現Mozilla developers網站指出:事件處理程序設置爲DOM對象

老的方法是隻給它分配是這樣的:

document.getElementById('cupcakeButton').onclick = getACupcake; 

如上所述,事件對象是全局或一個參數。這種方法可能有問題,並不是首選的方法,但它仍然是 的作品,很多人仍然使用它。

什麼類型的問題,這是否是指什麼?

+3

其一,如果您嘗試兩個處理程序連接到相同的元素相同的事件,第二個將替換第一個。通常的期望是一個事件可能有許多處理程序。當你將這兩種方法結合起來時,會發生什麼,但也不是很明顯。 (即,「分配」一個處理程序替換之前的「已添加」的程序嗎?它們是否都被調用?是否可以「移除」已分配的處理程序?我確定所有這些都是指定的,但最好是堅持一種方法而不是保持在你的腦海裏。) – millimoose 2013-05-13 21:45:44

+2

我建議閱讀http://www.quirksmode.org/js/events_tradmod.html。它也提到了一些問題。 – 2013-05-13 22:02:46

回答

1

最明顯的是已經提到,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 7have one more issue,這就是說它們也會返回元素name='id'而不是隻有元素id='id'。這可能真的讓你感到厭煩。

看一看jQuery一種方式附加DOM事件處理程序,避免瀏覽器兼容性問題。

1

我能想到的最大的問題是,它不會允許這樣做的另一個.onclick = fn;你基本上解除綁定以前的處理程序,如果它在那裏分配多個點擊處理。

即使奇蹟般地工作,你就沒有辦法註銷一個特定的處理程序;這是全部或沒有。

相關問題