将参数传递给jQuery中的事件处理程序
如何向处理程序发送外部作用域上的变量?将参数传递给jQuery中的事件处理程序
i = 1;
$(id).change(function() {myHandler(i)});
i = 2;
调用时,参数为2
也试过为字符串,DOM的工作,但在jQuery的不工作:
$(id).change('myHandler(' + i + ')');
说你要传递的数据对象,
var data = {i: 2};
$(id).change(data, myHandler);
在myHandler
功能:
function myHandler(event) {
var i = event.data.i; // <= your data
}
如果以后修改的值不会得到反映,则值将作为参数传递。
通过调用一个接受i作为参数的函数并返回一个函数,可以创建一个捕捉i的当前值的闭包。
function changeHandlerClosure(i) {
return function() {
//do stuff here with i
};
}
i = 1;
$(id).change(changeHandlerClosure(i));
i = 2;
这可以避免与DOM进行交互,有时候这会更方便但更慢。
闭包不捕获当前值,这是通过调用函数并创建一个新的范围来完成的。虽然'makeChangeHandler'返回的函数当然是一个闭包... – 2012-07-31 00:53:24
这很好,但我相信其他方法更好 – ariel 2012-07-31 00:56:56
不完全是菲利克斯。外部函数形成闭包。内部(返回)函数成为实际的事件处理程序,由于关闭,尽管'changeHandlerClosure'已完成并返回,仍然可以在外部环境中访问'i'。 – 2012-07-31 01:02:31
*如果以后修改的值不会得到反映,则该值作为参数传递。*可能只有在分配原始值时才有效。 – 2012-07-31 00:48:32
@FelixKling可能是的。同意! – devang 2012-07-31 00:49:56
很酷,谢谢..只是改变了第二个参数'function(){myHandler(i)}'到'myHandler' – ariel 2012-07-31 00:51:15