javascript在关闭时传递事件

时间:2013-11-01 19:07:25

标签: javascript closures

我正在尝试以下方法:

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

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

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

2 个答案:

答案 0 :(得分:4)

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

您需要return 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;
    // ...
}

答案 1 :(得分:1)

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

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

除非我在这里错过你的意图,否则你不应该需要自动执行功能