2011-08-03 76 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

相關問題