2011-02-04 113 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作为第一个参数,那么选择的值盒子,只要它改变了。

相关问题