jQuery - 调用.trigger('click')与.click()的区别

9
在jQuery中触发事件(例如click),使用 .trigger('click') 函数还是调用 .click() 函数,哪种更好?
我一直使用 .click() 触发此事件,但突然决定也许我应该改用 .trigger('click')
我使用这些事件触发器来触发通过 .on('click', function(){...}) 创建的事件监听器。
我已经查看了jquery api,搜索了其他stackoverflow帖子[1][2],但我看不出为什么要使用其中一种而不是另一种。
我更倾向于使用.trigger()使所有事件触发保持统一,因为它可以用于调用任何事件,包括自定义事件。但似乎.trigger()并不适用于所有情况。
哪种方法是触发事件的最佳方式?.trigger('click')还是.click()
2个回答

10
如果您使用.trigger(),则可以传递其他参数,而.click()必须无参数调用。
摘自文档:
$('#foo').bind('custom', function(event, param1, param2) {
  alert(param1 + "\n" + param2);
});
$('#foo').trigger('custom', ['Custom', 'Event']);
< p >在事件处理程序中,'Custom''Event'分别作为param1param2进行传递。

此外,.click()与其他根据参数数量实现get / set的函数不同,因为它实现的是trigger / set。对我来说,使用专用的.trigger()更合乎逻辑。


关于你最后提到的 .click() 同时注册和触发点击处理程序(取决于参数)的问题,我并不反对,但同样的情况也适用于许多 jQuery 方法(.html().css() 等),所以一旦你开始使用 jQuery,你很快就会习惯它。 - nnnnnn
1
@nnnnnn 但是按照这个逻辑,.click() 应该给我返回事件处理程序列表 :) - Ja͢ck
@nnnnnn 我已经修改了我的答案,但是对于一个旨在紧凑的库来说,提出SRP似乎不太公平;也许我忘记了多年来遇到的其他怪异之处,但这个问题似乎仍然突出 :) - Ja͢ck
那么,哪一个更好用呢? - Vic
@Vic 我在回答的最后一段清楚地表达了我的观点。 - Ja͢ck
显示剩余2条评论

8

使用jQuery方法时需要注意的一个要点是,.click()不仅是一个jQuery方法,还是DOM Level 2中的JavaScript原生方法,可以在HTML元素(如<button>元素)上调用。

这会导致混淆的情况之一是如果你有一个像这样的选择器:

$("#element")[0].click();

实际上,你是在调用DOM元素的方法。例如,如果你尝试:

$("#element")[0].trigger('click');

如果您尝试使用trigger方法,但元素未定义该方法,则会收到错误提示。

请注意,在某些元素上,$('#element')[0].click();在Safari浏览器中无法正常工作。您需要使用一种解决方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接