2011-02-04 94 views
36

我正在使用jQuery版本1.5。 我期待在jQuery的change()功能 ,特別在此位:如何使用jQuery的change()方法接受參數的函數?

.change([ eventData ], handler(eventObject)) 
eventData: A map of data that will be passed to the event handler. 
handler(eventObject): A function to execute each time the event is triggered. 

到底是什麼在JavaScript中「數據地圖」?我如何使用以下測試函數作爲事件處理程序?

var myHandler = function(msg){alert(msg);}; 

我已經試過這樣:

$("select#test").change(["ok"], myHandler); 

和警報報告的翻譯:

回答

56

請參閱event.data。該數據不作爲參數傳入的處理程序,但該事件對象的屬性:

$("select#test").change({msg: "ok"}, function(event) { 
    alert(event.data.msg); 
}); 

處理程序始終只接受一個參數,這是event對象。這就是爲什麼你的警報顯示"[object Object]",你的功能是打印事件對象。
如果你想使用的功能自定義參數,您必須將它們包裝成另一個功能:

$("select#test").change({msg: "ok"}, function(event) { 
    myHandler(event.data.msg); 
}); 

或只是

$("select#test").change(function(event) { 
    myHandler("ok"); 
}); 

順便說一句。選擇器最好寫成$('#test')。 ID是(應該是)唯一的。不需要預先標記標籤名稱。

+0

有一點需要注意的是,myHandler收到的$(this)在以這種方式調用時會有所不同。如果您需要您的原始$(this),您可以在「ok」之後將其作爲參數傳遞。 – 2013-04-18 16:14:48

13

到底是什麼在Javascript 「數據地圖」?

基本上只是一個對象,例如:

var data = { 
    foo: "I'm foo", 
    bar: "I'm bar" 
}; 

所有JavaScript對象基本上是映射(又名 「字典」 又名 「關聯數組」)。

如何將以下測試函數用作事件處理程序?

通過另一個函數進行包裝:

$("select#test").change(function() { 
    myHandler($(this).val()); 
}); 

,與選擇框,每當它改變的值調用myHandler

如果你想使用eventData部分,對象處理程序之前添加:

$("select#test").change({ 
    foo: "I'm foo" 
}, function(event) { 
    myHandler(event.data.foo, $(this).val()); 
}); 

,與「我foo」的呼叫myHandler作爲第一個參數,那麼選擇的值盒子,只要它改變了。

相關問題