2012-07-31 109 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

相關問題