如何向處理程序發送外部作用域上的變量?將參數傳遞給jQuery中的事件處理程序
i = 1;
$(id).change(function() {myHandler(i)});
i = 2;
調用時,參數爲2
也試過爲字符串,DOM的工作,但在jQuery的不工作:
$(id).change('myHandler(' + i + ')');
如何向處理程序發送外部作用域上的變量?將參數傳遞給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