从jQuery的doc,似乎我应该能够使用$.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。经过FF 28,Chrome 34测试。
刚刚尝试将trigger
更改为triggerHandler
,它似乎修复了复选框,同时打破了其他两个。
我做错了吗?为什么这种行为如此奇怪?
答案 0 :(得分:1)
这是由于复选框的特殊情况,当您触发click事件时,将触发本机单击事件以使状态发生更改。因此,jquery无法传递额外的事件参数。无论这是一个错误还是有意,我都不知道。
解决方案是使用triggerHandler
和循环来获取由.first()
应用的triggerHandler
。 triggerHandler
有效,因为它不会调用本机点击事件(它不需要更改状态,因为您只是触发处理程序)
$('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