2013-12-17 73 views
2

所有我打算做的僅僅是隱藏一個div單擊該按鈕時:這些正確的事件偵聽器語義?

function hideDiv() { 
    myDiv.style.visibility = 'hidden'; 
} 

上述功能是說,對象helpers

的成員,如果我這樣做,我有確保在此行之前創建助手對象。是否有任何其他陷阱?:

buttonOK.addEventListener('click', helpers.hideDiv, false); 

會是更好的事情可做:

buttonOK.addEventListener('click', function() {helpers.hideDiv();}, false); 

或需要我通過在即使我不使用它的事件參數?

buttonOK.addEventListener('click', function (event) {helpers.hideDiv();}, false); 

或以其他方式?

+4

使用#1,沒有理由再延長它。 –

+1

函數被引用的第一個參數是正確的語法,除非需要傳遞參數。該事件會自動傳遞,並且它們都可以正常工作? – adeneo

+0

定義「最佳實踐」。比什麼更好,什麼標準更好? – RobG

回答

1

如果你不叫hideDiv其他地方,那麼我會說,最好的做法是用一個匿名函數,而不是使用全局命名空間,並使用this指觸發事件的元素:

buttonOK.addEventListener('click', function(e) { 
    myDiv.style.visiblity = 'hidden'; 
}, false); 

沒有理由要使用額外功能,以這種形式:

buttonOK.addEventListener('click', function (event) {hideDiv();}, false); 

,除非你有一些自定義的參數傳遞給hideDiv()你不在這裏。額外的功能只是額外的開銷,並將調用模式更改爲hideDiv,以便this不會是觸發事件的元素。


如果你在其他事件處理程序使用hideDiv過,那麼你可以使用:

function hideDiv(e) { 
    myDiv.style.visiblity = 'hidden'; 
} 

buttonOK.addEventListener('click', hideDiv, false); 
buttonOK2.addEventListener('click', hideDiv, false); 
buttonOK3.addEventListener('click', hideDiv, false); 
+0

但不會'this'引用按鈕?在這種情況下,按鈕將被隱藏?而不是div – Dave

+0

@Dave - 是的 - 我沒有意識到這不是你想要的 - 我將它改回myDiv。 – jfriend00

0

在這種情況下,「最佳實踐」,主要取決於你實際上是試圖做。 爲你的榜樣最好的做法實際上是一個你沒有上市,那就是做隱藏作爲事件處理程序的一部分:

buttonOK.addEventListener('click',function(){this.style.visibility='hidden'},false); 

做不過請注意,做這種方式自動意味着你的代碼需要用戶有一個最近的瀏覽器,因爲一些老版本的Internet Explorer不支持addEventListener,並不是所有的polyfills都正確地分配了this變量