jquery 如何为复选框单击事件使用自定义事件参数?

lnlaulya  于 4个月前  发布在  jQuery
关注(0)|答案(2)|浏览(65)

从jQuery的文档中,似乎我应该能够使用$.fn.trigger将自定义参数传递给复选框单击处理程序。
参见http://jsfiddle.net/2t6y7/
超文本标记语言:

<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,它似乎修复了复选框,同时打破了其他两个。
http://jsfiddle.net/2t6y7/1/
我做错什么了吗?为什么行为如此奇怪?

2g32fytz

2g32fytz1#

这是由于复选框的一个特殊情况,当你触发click事件时,原生的click事件会被触发,导致状态发生变化。因此,jquery无法传递额外的event参数。这是否是一个bug或故意的,我不知道。
解决方案是使用triggerHandler和一个循环来获取由triggerHandler应用的.first()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']);
})

字符串
http://jsfiddle.net/2t6y7/4/
参考:https://github.com/jquery/jquery/blob/2.0.3/src/event.js#L557

相关问题