2011-08-03 41 views

回答

16

没有区别;对于同样的事情,它只是不同的术语。

为了事件处理的目的,有不同的方法将函数与DOM元素关联起来,就是这样。当标准不断变化时(或者仅仅因为实施者是角逐或困难),但最终机制基本上是相同的。

如果你感到困惑什么样的事件处理程序的注册使用,您可以:

  • Read more about the topic并选择使用,或者在浏览器的浏览器基础上的方法;
  • 选择流行的JavaScript框架之一,使用它的机制用于连接处理器
+0

感谢您的回答。所以,当这两者之间没有区别时,我只会使用事件处理程序,因为浏览器支持。 (我需要两个监听器,但只有一个处理器)。 –

+0

但是......“侦听器”和“处理器”之间没有区别,所以你有三个侦听器,三个处理器或任何组合。事实上,这可能不是一种很好的习惯,可以将不同的方式联系在一起。 – Pointy

+0

恩,我不会混合他们。我只是说我只需要一个处理程序而不是两个侦听器(一个用于NS事件模型的侦听器,另一个用于MS事件模型)。 –

23

处理程序和一个监听器是在同一个 - 只为将处理事件功能的同义词。 “处理程序”可能是更为接受的术语,对我而言,语义上肯定更正确。术语“听众”是从用于将事件添加到元素的代码导出:

element.addEventListener('click', function() { /* do stuff here*/ }, false); 

你可以,不过,得到真正挑剔,并打破这两个分解成不同的意思。如果你非常喜欢,“处理程序”可以是添加“监听程序”时要处理事件的函数的术语,因此可以有多个使用单个“处理程序”的“监听程序”。考虑:

// handler is synonymous with function 
function someFunction(e) { 
    if (typeof e == 'undefined') 
    alert('called as a function'); 
    else 
    alert('called as a handler'); 
} 


// use someFunction as a handler for a 
// click event on element1 -- add a "listener" 
element.addEventListener('click', someFunction, false); 
// use an anonymous function as a handler for a 
// click event on element1 -- add another "listener" 
element.addEventListener('click', function() { alert('anonymoose'); }, false); 


// use someFunction as a handler for a 
// click event on element2 -- add a "listener" 
element2.addEventListener('click', someFunction, false); 

// call someFunction right now 
someFunction(); 

因此,在上面的代码中,我有2个“处理程序”(someFunction和匿名函数)和3“收听”。

此外,这是所有语义 - 对于所有实际用途,术语监听器和处理程序可互换使用。如果需要做出区分,那么听众是对将触发对处理者(其是功能)的呼叫的事件的订阅。

清除泥?

+0

为了使它与注释一致,可以使其成为“element1.addEventListener(...)” –

+0

或多或少与Java中的相同。 http://stackoverflow.com/a/4725508/3184778。现在更有意义。 Thx – kouretinho

+0

_Anonymoose_ LOL:P. – Arjun

相关问题