我需要可靠地检测页面上单选按钮/复选框的状态变化,以便查看表单是否被修改。现在,这是一个完全独立的脚本,我不能修改任何控制表单的内容。
现在,我只能看到两种方法:
onchange
事件处理程序,它帮助处理文本框、文本框和选择,但不为复选框/无线电按钮触发。onclick
事件处理程序不可靠,因为用户经常使用热键来更改这些元素的值。我在这里错过了什么?是否有一种方法可以可靠地检测选中/未选中的复选框?
更新:正如你们所指出的,更改事件实际上是在复选框/无线电按钮上触发的,尽管w3schools说它只适用于文本输入。
但是,我的问题是,复选框/无线电按钮的值是通过脚本中的setAttribute设置的,在这种情况下,事件不会被触发。
在这种情况下我能做些什么吗?
发布于 2011-04-10 09:13:27
见:http://www.quirksmode.org/dom/events/change.html。
它说所有主要的浏览器都支持变更事件,但是IE的实现是错误的。
当复选框或无线电被模糊时,而不是当它被激活时,即触发事件。这是一个严重的错误,需要用户采取另一项操作,并根据复选框和收音机上的更改事件防止一致的跨浏览器界面。
我想你可以用这个技巧来克服IE的错误。模糊()元素,当它们聚焦!(使用类似于$('input[type=radio]').focus(function(){$(this).blur();});
的jQuery或使用纯javascript)
发布于 2011-04-11 21:25:45
好吧,经过一番挖掘,这是我发现的。注意,这适用于Firefox,而且可能只适用于Firefox。因为在这种情况下,我处理的是内部应用程序,这对我来说就足够了。
因此,基本上,为了让可靠地检测到火狐中复选框/放射按钮状态的变化,您需要做两件事:
setAttribute
通过脚本修改这些事件时,这些事件将被触发,然而,当脚本中的状态被更改时,使用这些元素的checked
或selected
属性时,这就是为什么我们需要.checked
查看Object.watch属性的变化标准onchange
事件不好,因为它只在用户直接更改值时触发。
该死,这东西坏了..。
如果人们感兴趣,我会发布一些代码。
https://stackoverflow.com/questions/5613278
复制