如何使用自定义事件参数进行复选框点击事件?

时间:2014-04-22 21:35:18

标签: javascript jquery javascript-events

从jQuery的doc,似乎我应该能够使用$.fn.trigger将自定义参数传递给复选框点击处理程序。但是,我似乎无法使其发挥作用。

请参阅http://jsfiddle.net/2t6y7/

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,它似乎修复了复选框,同时打破了其他两个。

http://jsfiddle.net/2t6y7/1/

我做错了吗?为什么这种行为如此奇怪?

1 个答案:

答案 0 :(得分:1)

这是由于复选框的特殊情况,当您触发click事件时,将触发本机单击事件以使状态发生更改。因此,jquery无法传递额外的事件参数。无论这是一个错误还是有意,我都不知道。

解决方案是使用triggerHandler和循环来获取由.first()应用的triggerHandlertriggerHandler有效,因为它不会调用本机点击事件(它不需要更改状态,因为您只是触发处理程序

$('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']);
})

http://jsfiddle.net/2t6y7/4/

参考:https://github.com/jquery/jquery/blob/2.0.3/src/event.js#L557