如何在复选框或单选上使用jQuery触发器,使其与用户单击它完全相同
How to do a jQuery trigger on checkbox or radio so that it is exactly the same as a user clicking it?
我有一个使用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中,为什么在点击一个未选中的复选框的触发后,事件处理程序报告它未被选中?
- 如何在用户单击时创建带有弹出窗格的图像
- 使用jQuery切换来显示内容,但防止在用户单击输入元素时关闭
- 试图修改此javascript代码以减小弹出窗口的大小,或者在用户单击框外时关闭
- 用户单击“关闭”按钮后,将永久关闭灯箱
- 当用户单击按钮(在光标位置)时,在输入字段中添加一个文本字符串
- 当用户单击保存按钮时,标签会显示一条消息
- 如何在用户单击共享时禁用共享按钮,并在3小时后启用
- 如何区分用户单击链接和在 UIWebView 中执行自动重定向的页面
- HTML 框架 - 防止引导弹出窗口在用户单击正文时消失
- 用户单击带有哈希值的链接以访问该页面,如果禁用Javascript会发生什么情况
- 我该怎么做才能防止在用户单击后退按钮时出现咆哮消息
- 当用户单击时,在新选项卡中打开链接
- 纯javascript的进度图像加载程序仅当用户单击提交html表单时
- 每次用户单击按钮时运行if语句检查器
- 如何在用户单击提交按钮时为变量分配任意值
- 当用户单击关闭浏览器时(但不是当用户单击刷新按钮时),JavaScript会确认启动
- 阻止用户单击提交按钮
- 如果用户单击其他按钮,则禁用表单元素
- 检查用户单击的菜单
- PHP-根据用户单击的按钮返回true或false