2

我正在尝试以下操作:

f.addEventListener('submit',(function(frm){
var func = (function(e){somefunction(e,frm);})(e);
})(f),false);

但这是失败的。我想将表单 (f) 作为静态引用和动态事件对象传递给命名函数“somefunction”。

我上面的内容不起作用,传递两者的正确语法是什么?

4

2 回答 2

5

问题是每个functions 都被立即调用,undefined实际上被传递给addEventListener().

您需要替换没有调用括号return的 s 之一,function以便事件可以稍后调用它:

f.addEventListener('submit', (function (frm) {
    return function (e) {
        someFunction(e, frm);
    };
})(f), false);

但是,对于事件绑定,您可能不一定需要闭包,因为这<form>将是传递的上下文 ( this) :function

f.addEventListener('submit', someFunction, false);

function someFunction(e) {
    var frm = this;
    // ...
}
于 2013-11-01T19:12:45.673 回答
1

不知道您正在尝试做什么,但是看起来您正试图通过事件处理程序手动传递表单。而是保存一个引用并在处理程序中引用它,例如

f.addEventListener('submit',function(){
    var func = function(e){
      somefunction(e,f);
    };
},false);

除非我在这里错过了您的意图,否则您不需要自我执行功能

于 2013-11-01T19:14:18.327 回答