jQuery - 调用.trigger('click')vs .click()

时间:2012-11-22 02:16:07

标签: javascript jquery

在jQuery中触发click等事件的更好方法是什么?使用.trigger('click')功能或致电.click()

我总是使用.click()触发此事件,但突然决定我应该使用.trigger('click')代替。

我使用这些事件触发器来触发使用.on('click', function(){...})创建的事件侦听器。

我已检查jquery api,搜索了其他stackoverflow帖子[ 1 ] [ 2 ],我认为没有理由使用其中一个帖子。

我更倾向于使用.trigger()来保持所有事件触发一致,因为这可以用于调用任何事件,包括自定义事件。但似乎.trigger()在所有情况下都不起作用。

触发活动的最佳方式是什么? .trigger('click').click()

2 个答案:

答案 0 :(得分:10)

如果您使用.trigger(),则可以传递其他参数,而.click()必须在没有任何参数的情况下调用。

取自documentation

$('#foo').bind('custom', function(event, param1, param2) {
  alert(param1 + "\n" + param2);
});
$('#foo').trigger('custom', ['Custom', 'Event']);

'Custom''Event'分别以param1param2传递给事件处理程序

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

答案 1 :(得分:7)

使用jQuery方法时要注意的一点是,除了作为jQuery方法之外,.click()也是可以在HTML元素上调用的DOM Level 2 native JavaScript method,例如作为<button>元素。

如果您有这样的选择器,那么这可能会让您感到困惑:

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

在那里,您实际上正在调用DOM元素上的方法。例如,如果你试过

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

如果元素没有定义trigger方法,则会收到错误。

请注意$('#element')[0].click();在某些元素上无法在Safari中使用。您需要使用解决方法。