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

时间:2013-04-02 18:20:43

标签: javascript jquery

我有一个使用can.js的页面,因此在jsfiddle.net上重现起来比较困难,但最终结果如下:

如果我点击复选框(或者它也可以是单选按钮),则另一个input文本框将更新由于我的点击而导致的更改。 (例如,文本框现在将显示“蓝色”)。

但是,如果我在Firebug的控制台或Chrome的开发人员工具控制台内使用jQuery以编程方式执行此操作:

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

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

然后会检查网页上的复选框,但input文本框值不会像以前那样更新为“蓝色”。

因此,为了更加贴心地模拟用户使用代码点击复选框,我尝试了:

$("#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上尝试过的,因此它不应该是浏览器问题。此外,我甚至尝试过首先关注然后触发带有SPACE字符的keydown事件,但它仍然不会有什么更奇怪的是,如果我触发点击两次,那么input文本框实际上会显示更新为“蓝色”,那么为什么要两次?)。

1 个答案:

答案 0 :(得分:-1)

答案是,这是由于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日。

以下内容有更多信息:In jQuery, why after a trigger of click on an unchecked checkbox, the event handler reports it is not checked?