从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/
我做错什么了吗?为什么行为如此奇怪?
2条答案
按热度按时间2g32fytz1#
这是由于复选框的一个特殊情况,当你触发click事件时,原生的click事件会被触发,导致状态发生变化。因此,jquery无法传递额外的event参数。这是否是一个bug或故意的,我不知道。
解决方案是使用
triggerHandler
和一个循环来获取由triggerHandler
应用的.first()
。triggerHandler
之所以有效,是因为它不调用本机单击事件(它不需要更改状态,因为您只是触发 * 处理程序 *)字符串
http://jsfiddle.net/2t6y7/4/
参考:https://github.com/jquery/jquery/blob/2.0.3/src/event.js#L557
oipij1gg2#
这是由于jQuery release 3.4.0中的bug是fixed。