我需要可靠地检测页面上单选按钮/复选框的状态更改,以便观察表单是否被修改。现在,这是一个完全独立的脚本,我无法修改任何控制表单的内容。
现在,我只能看到两种方法:
onchange
事件处理程序,它可以帮助处理文本框,textareas和选择,但不会触发复选框/ radiobuttons onclick
事件处理程序,这是不可靠的,因为用户经常使用热键来更改这些元素的值。我在这里缺少什么?有没有办法可靠地检测复选框是否已选中/未选中?
更新:正如你们所指出的那样,改变事件确实是在复选框/单选按钮上被触发,尽管w3schools说它只适用于text inputs
但是,我的问题是,复选框/单选按钮的值是通过脚本中的setAttribute设置的,在这种情况下,事件不会被触发。
在这种情况下我能做些什么吗?
答案 0 :(得分:2)
请参阅:http://www.quirksmode.org/dom/events/change.html。
它说所有主流浏览器都支持更改事件,但IE的实现是错误的。
IE会在复选框或收音机模糊时触发事件,而不会在激活时触发。这是一个严重的错误,需要用户采取其他操作,并根据复选框和无线电上的更改事件阻止一致的跨浏览器界面。
我认为你可以通过这个技巧克服IE的错误。当他们聚焦时,模糊()元素! (在jQuery中使用$('input[type=radio]').focus(function(){$(this).blur();});
或使用纯javascript)
答案 1 :(得分:0)
好的,经过一番挖掘,这是我发现的。注意,这适用于Firefox,并且可能仅适用于Firefox。因为在这种情况下我正在处理内部应用程序,这对我来说已经足够了。
所以,基本上,为了可靠检测Firefox中checkbox / radiobutton状态的变化,你需要做两件事:
setAttribute
通过脚本修改输入时,将触发这些事件,但是,当使用checked
或脚本在脚本中更改状态时,不会触发这些事件selected
这些元素的属性,这就是我们需要的原因...... checked
属性的更改
醇>
标准onchange
事件并不好,因为它只会在用户直接更改值时触发。
该死的,这件事情已经破了......
如果有人对此感兴趣,我会发布一些代码。