在创建对象时将参数传递给jQuery事件处理程序

时间:2013-07-22 13:30:55

标签: jquery events

我正在动态创建一个对象并将onclick事件绑定到它:

jQuery('<a/>', {
    click: function() { foo(arg1, arg2) },
    ...
})

一切都很好。问题是它是否可以简化,所以我不需要funciton()包装器来调用带有参数的foo函数?

提前致谢。

2 个答案:

答案 0 :(得分:3)

您不能将其他参数传递给jQuery事件处理程序,jQuery将事件对象作为事件处理程序的一个参数传递。

在jQuery 1.7及更高版本中,on()函数允许您通过传递包含要在处理程序中使用的数据的对象来扩展事件对象。您可以访问event.data对象

上的数据
function foo(event) {
    event.data.arg1;
    event.data.arg2;    
}

jQuery('<a/>').on('click', {arg1: val1, arg2: val2}, foo)

答案 1 :(得分:2)

匿名函数提供的额外闭包是必要的步骤 - 除非您确定ECMAscript 5支持(IE8及以下版本不支持),在这种情况下您可以使用bind方法:

jQuery('<a/>', {
    click: foo.bind(this, arg1, arg2)
})

如果您愿意加入Underscore 微型库which contains a shim for bind,您仍然可以在IE8及更低版本中使用此方法:

jQuery('<a/>', {
    click: _.bind(foo, this, arg1, arg2)
})

如果你不能做其中任何一项,那你就不走运了!