在jQuery中触发click等事件的更好方法是什么?使用.trigger('click')
功能或致电.click()
?
我总是使用.click()
触发此事件,但突然决定我应该使用.trigger('click')
代替。
我使用这些事件触发器来触发使用.on('click', function(){...})
创建的事件侦听器。
我已检查jquery api,搜索了其他stackoverflow帖子[ 1 ] [ 2 ],我认为没有理由使用其中一个帖子。
我更倾向于使用.trigger()
来保持所有事件触发一致,因为这可以用于调用任何事件,包括自定义事件。但似乎.trigger()
在所有情况下都不起作用。
触发活动的最佳方式是什么? .trigger('click')
或.click()
?
答案 0 :(得分:10)
如果您使用.trigger()
,则可以传递其他参数,而.click()
必须在没有任何参数的情况下调用。
$('#foo').bind('custom', function(event, param1, param2) {
alert(param1 + "\n" + param2);
});
$('#foo').trigger('custom', ['Custom', 'Event']);
'Custom'
和'Event'
分别以param1
和param2
传递给事件处理程序
除此之外,.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中使用。您需要使用解决方法。