如何在复选框或单选上使用jQuery触发器,使其与用户单击它完全相同

How to do a jQuery trigger on checkbox or radio so that it is exactly the same as a user clicking it?

本文关键字:用户 单击 触发器 复选框 单选 jQuery      更新时间:2023-09-26

我有一个使用can.js的页面,所以很难在jsfiddle.net上复制,但最终结果是:

如果我点击复选框(或者它也可以是一个单选按钮),那么另一个input文本框将更新由于我点击而产生的更改。(例如,文本框现在显示为"蓝色")。

但是,如果我在Firebug的控制台或Chrome的开发人员工具控制台中使用jQuery编程:

$("#some-form input:eq(3)").trigger("click");  

 $("#some-form input:eq(3)").click();

则网页上的复选框实际上会被选中,但input文本框的值不会像以前一样更新为"Blue"。

因此,为了更接近地模拟用户使用代码单击复选框,我尝试:

$("#some-form input:eq(3)").trigger("focus");
$("#some-form input:eq(3)").trigger("mousedown");
$("#some-form input:eq(3)").trigger("mouseup");
$("#some-form input:eq(3)").trigger("click");
$("#some-form input:eq(3)").trigger("change");

,但以上所有内容加在一起仍然不能模拟用户手动单击复选框。

尽管can.js代码使用can.compute()或can. observe()来更新input文本框可能很复杂,但关键是,如果用户手动单击无线电或复选框可以工作,为什么不以编程方式。换句话说,什么可以通过编程来完成,而与真正的物理点击几乎相同?我可能错过了什么活动吗?

(更多细节:这是在最新的Firefox和Chrome上尝试的,所以它应该不是浏览器问题。)此外,我甚至尝试了先对焦,然后用空格字符触发按键事件,但它仍然没有效果。更奇怪的是,如果我触发点击两次,那么input文本框实际上显示更新为"蓝色",那么为什么两次呢?)。

答案是,这是由于jQuery的错误:

http://bugs.jquery.com/ticket/3827

我可以复制它,通过使用:

// strange behavior:
$("#some-form input:eq(3)").click();

,如果替换为本地click:

document.getElementById("some-form").getElementsByTagName("input")[3].click();

那么它可以完美地在Chrome, Safari和Firefox上工作。

所以这个修复似乎是在jQuery 1.9中出现的,它是在2013年1月15日。

有更多的信息:在jQuery中,为什么在点击一个未选中的复选框的触发后,事件处理程序报告它未被选中?