2009-06-08 38 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中尝试了一个类似于你的片段并且失败了),因为它违反了规范;而且,由于它违反了规范,因此不能保证事件将以什么顺序触发,所以如果这很重要,则无法真正保证事件触发的顺序。

似乎有点清理是为了。

相关问题