2013-08-02 35 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

相关问题