我有一个使用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
文本框实际上会显示更新为“蓝色”,那么为什么要两次?)。
答案 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日。