2

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

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

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

提前致谢。

4

2 回答 2

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)
于 2013-07-22T13:47:13.660 回答
2

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

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

如果您愿意包含Underscore微型库,您仍然可以在 IE8 及以下版本中使用此方法,其中包含 shim 用于bind

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

如果你不能做到这两点,那你就倒霉了!

于 2013-07-22T13:46:36.893 回答