$.fn.trigger
将自定义参数传递给复选框单击处理程序。但是,我似乎无法让这个工作。
HTML:
<input type="checkbox"/> <span></span>
<hr/>
<input type="text"/> <span></span>
<hr/>
<button>foo</button> <span></span>
JS:
$('input, button').click(function(e, arg1) {
console.log(arguments);
$(this).next().text('arg1: ' + arg1);
});
$('input, button').triggerHandler('click', ['passed in', 'unused arg']);
文本输入和按钮显然可以工作,但复选框不起作用。
使用 jQuery 1.10.2。使用 Firefox 28、Chrome 34 进行测试。
刚刚尝试将
trigger
更改为 triggerHandler
,它似乎修复了该复选框,同时破坏了其他两个。
我做错了什么吗?为什么行为如此奇怪?
这是由于复选框的特殊情况,当您触发单击事件时,会触发本机单击事件以导致状态发生更改。因此,jquery 无法传递额外的事件参数。我不知道这是一个错误还是有意为之。
解决方案是使用
triggerHandler
和一个循环来获取由 .first()
应用的 triggerHandler
。 triggerHandler
之所以有效,是因为它不会调用本机单击事件(它不需要更改状态,因为您只是触发handler)
$('input, button').click(function(e, arg1) {
console.log(arguments);
$(this).next().text('arg1: ' + arg1);
});
$('input, button').each(function(){
$(this).triggerHandler('click', ['passed in', 'unused arg']);
})
参考:https://github.com/jquery/jquery/blob/2.0.3/src/event.js#L557
这是由于 jQuery release 3.4.0 中已修复的错误所致。