检测单选按钮/复选框状态的更改

时间:2011-04-10 16:56:53

标签: javascript firefox dom

我需要可靠地检测页面上单选按钮/复选框的状态更改,以便观察表单是否被修改。现在,这是一个完全独立的脚本,我无法修改任何控制表单的内容。

现在,我只能看到两种方法:

  • onchange事件处理程序,它可以帮助处理文本框,textareas和选择,但不会触发复选框/ radiobuttons
  • onclick事件处理程序,这是不可靠的,因为用户经常使用热键来更改这些元素的值。

我在这里缺少什么?有没有办法可靠地检测复选框是否已选中/未选中?

更新:正如你们所指出的那样,改变事件确实是在复选框/单选按钮上被触发,尽管w3schools说它只适用于text inputs

但是,我的问题是,复选框/单选按钮的值是通过脚本中的setAttribute设置的,在这种情况下,事件不会被触发。

在这种情况下我能做些什么吗?

2 个答案:

答案 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状态的变化,你需要做两件事:

  1. 分别为checkbox和radiobutton设置自定义Firefox的事件处理程序CheckboxStateChange and RadioStateChange。当用户更改输入或使用setAttribute通过脚本修改输入时,将触发这些事件,但是,当使用checked或脚本在脚本中更改状态时,不会触发这些事件selected这些元素的属性,这就是我们需要的原因......
  2. 使用Object.watch
  3. 观看checked属性的更改

    标准onchange事件并不好,因为它只会在用户直接更改值时触发。

    该死的,这件事情已经破了......

    如果有人对此感兴趣,我会发布一些代码。