如何使用带有jQuery的change()方法参数的函数?

时间:2011-02-04 11:14:49

标签: javascript jquery event-handling

我正在使用jQuery 1.5版。 我正在研究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);

和警报报告[对象对象]

2 个答案:

答案 0 :(得分:58)

event.data。数据不作为参数传递给handler,而是作为事件对象的属性:

$("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(应该)是唯一的。无需添加标记名称。

答案 1 :(得分: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());
});

调用myHandler时将“我是foo”作为第一个参数,然后选择框的值,只要它发生变化。