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

问题描述 投票:0回答:2

从 jQuery 的文档来看,我似乎应该能够使用

$.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。使用 Firefox 28、Chrome 34 进行测试。

编辑:

刚刚尝试将

trigger
更改为
triggerHandler
,它似乎修复了该复选框,同时破坏了其他两个。

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

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

javascript jquery jquery-events
2个回答
2
投票

这是由于复选框的特殊情况,当您触发单击事件时,会触发本机单击事件以导致状态发生更改。因此,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']);
})

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

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


0
投票

这是由于 jQuery release 3.4.0已修复的错误所致。

© www.soinside.com 2019 - 2024. All rights reserved.