2013-08-02 39 views
0

我有一個ID,我想分配兩個功能。這是它目前的樣子:JavaScript/jQuery:一個ID,兩個函數。我怎樣才能做到這一點與最小的代碼重複?

document.getElementById(this.config.dragArea).addEventListener("drop", this._dropFiles, false); 
document.getElementById(this.config.dragArea).addEventListener("drop", this._handleFileDrop, false); 

我該如何重寫這個文件而沒有太多的重複?

我試着做

document.getElementById(this.config.dragArea).addEventListener("drop", this._dropFiles, this._handleFileDrop, false); 

document.getElementById(this.config.dragArea).addEventListener("drop", function(){this._dropFiles; this._handleFileDrop}, false); 

一切都無濟於事:( jQuery的解決方案允許

+2

循環?變量?它只是兩個?如果是這樣,那真的是一個問題嗎?將隨機的額外參數傳遞給一個定義好的函數當然不是一個解決方案 –

+0

這只是這兩個函數 - 我想要的是能夠將它們兩個連接到ID用一行,而不必重寫整個再來一次。 – user1775598

回答

0

如果你真的想要的東西......烘乾機

[this._dropFiles, this._handleFileDrop].forEach(function(fun){ 
    document.getElementById(this.config.dragArea).addEventListener("drop", fun); 
}); 

請注意,IE8上需要墊片forEach

你也可以更合理地簡單地將document.getElementById(this.config.dragArea)存儲在一個變量中並重用它。

1

這將是更好的性能:

var dragArea = document.getElementById(this.config.dragArea); 
dragArea.addEventListener("drop", function() { 
    that._dropFiles(); 
    that._handleFileDrop(); 
}, false); 

如果你有很多的事件偵聽器,那麼你可以做某種循環指派一大堆this._doX功能,但只是這兩個監聽器,那可能會過於複雜。

使用jQuery:

var dragArea = $(this.config.dragArea); 
var that = this; 
dragArea.on("drop", function() { 
    that._dropFiles(); 
    that._handleFileDrop(); 
}); 
+0

嗯..如果我使用jQuery怎麼樣?我已經編輯了這個問題來允許jQuery解決方案。 – user1775598

+0

添加了jQuery解決方案。它不像香草JS解決方案那麼複雜。回想起來,你可以使用一個匿名函數來調用這兩種函數。正在更新... – Jackson

相關問題