-1

我有一个使用 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 上尝试过的,所以它不应该是浏览器问题。另外,我什至尝试过先聚焦,然后用空格字符触发 keydown 事件,但仍然没有效果. 更奇怪的是,如果我真的触发了两次点击,那么input文本框实际上显示更新为“蓝色”,那为什么两次?)。

4

1 回答 1

-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 上完美运行。

所以修复似乎是在 2013 年 1 月 15 日的 jQuery 1.9 中发布的。

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

于 2013-04-02T23:40:40.763 回答