2012-07-31 81 views
2

如何向处理程序发送外部作用域上的变量?将参数传递给jQuery中的事件处理程序

i = 1; 
$(id).change(function() {myHandler(i)}); 
i = 2; 

调用时,参数为2

也试过为字符串,DOM的工作,但在jQuery的不工作:

$(id).change('myHandler(' + i + ')'); 

回答

8

说你要传递的数据对象,

var data = {i: 2}; 
$(id).change(data, myHandler); 

myHandler功能:

function myHandler(event) { 
    var i = event.data.i; // <= your data 
} 

如果以后修改的值不会得到反映,则值将作为参数传递。

+0

*如果以后修改的值不会得到反映,则该值作为参数传递。*可能只有在分配原始值时才有效。 – 2012-07-31 00:48:32

+0

@FelixKling可能是的。同意! – devang 2012-07-31 00:49:56

+0

很酷,谢谢..只是改变了第二个参数'function(){myHandler(i)}'到'myHandler' – ariel 2012-07-31 00:51:15

1

通过调用一个接受i作为参数的函数并返回一个函数,可以创建一个捕捉i的当前值的闭包。

function changeHandlerClosure(i) { 
    return function() { 
     //do stuff here with i 
    }; 
} 

i = 1; 
$(id).change(changeHandlerClosure(i)); 
i = 2; 

这可以避免与DOM进行交互,有时候这会更方便但更慢。

+0

闭包不捕获当前值,这是通过调用函数并创建一个新的范围来完成的。虽然'makeChangeHandler'返回的函数当然是一个闭包... – 2012-07-31 00:53:24

+0

这很好,但我相信其他方法更好 – ariel 2012-07-31 00:56:56

+0

不完全是菲利克斯。外部函数形成闭包。内部(返回)函数成为实际的事件处理程序,由于关闭,尽管'changeHandlerClosure'已完成并返回,仍然可以在外部环境中访问'i'。 – 2012-07-31 01:02:31

相关问题