2009-06-08 85 views

回答

2

Yes,你可以有多個事件監聽器,並且沒有,使用多個屬性是不正確的(請參閱我的評論)。

+0

正如Alex的例子所顯示的,添加多個事件監聽器的方式並不是通過將多個onXXX屬性設置爲不同的值(這是無效的標記,驗證器會告訴您這一點(請參閱Josh的回答)。在大多數瀏覽器上工作 – laginimaineb 2009-06-09 05:09:21

0

validator會告訴你它是否有效。我會告訴你,練習behavorial separation會更好。

+0

不,它不會,一個元素只能有一個給定屬性的實例 – Quentin 2009-06-08 18:46:21

1

Here是如何正確連接多個處理程序數字醚一個很好的例子,工程無論是在符合標準的瀏覽器和IE瀏覽器:

/** 
* Add events 
* @param Object HTML Element 
* @param string name of trigger 
* @param string name of function to attach 
* @param bool capture 
*/ 
addEvent = function(el, evType, fn, useCapture) { 
    if (el.addEventListener) { 
     el.addEventListener(evType, fn, useCapture); 
     return true; 
    } 
    else if (el.attachEvent) { 
     var r = el.attachEvent('on' + evType, fn); 
     return r; 
    } 
    else { 
     el['on' + evType] = fn; 
    } 
} 
0

我認爲這是不合法的標記的情況下,出現這種情況的工作在某些瀏覽器中。因此,它應該被認爲是一些需要重構的代碼。

正如Josh Stodola和David Dorward指出的那樣,元素不能有多個相同屬性的實例,並且W3C validator也會指出這一點。

但是,有些瀏覽器相當寬容,無論驗證如何都會讓事情順利進行;但其他人不會,而且這些瀏覽器的用戶將會遇到問題。基本上,你會發現自己處於奇怪的邊緣情況和不受支持的行爲:很難保證它在哪些瀏覽器中工作(我在Firefox 3中嘗試了一個類似於你的片段並且失敗了),因爲它違反了規範;而且,由於它違反了規範,因此不能保證事件將以什麼順序觸發,所以如果這很重要,則無法真正保證事件觸發的順序。

似乎有點清理是爲了。

相關問題