2011-04-10 85 views
5

我需要可靠地检测单选按钮的状态转变的转变/为了我的网页上的复选框来观看,如果窗体被修改或没有。现在,这是一个完全独立的脚本,我无法修改任何控制表单的东西。检测在单选按钮/复选框状态

现在,我可以看到只有两个这样做的方法:

  • onchange事件处理程序,它与文本框,文本域并选择帮助,但不解雇复选框/单选按钮
  • onclick事件处理程序,这是不可靠的,因为用户经常使用热键来改变这些元素的值。

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

UPDATE:正如你们所指出的,变化的事件真的开枪复选框/单选按钮,尽管W3Schools的说,这是只针对text inputs

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

有什么我可以在这种情况下怎么办?

+1

复选框和单选按钮会触发'onchange'事件,问题是只有当复选框或单选按钮失去焦点时,IE才会触发事件。 – 2011-04-10 17:18:17

回答

1

请参见:http://www.quirksmode.org/dom/events/change.html

它说,所有主要的浏览器都支持更改事件,但IE浏览器的实现是越野车。

当复选框或收音机模糊不清而且没有激活时,IE会触发事件。这是一个严重的错误,需要用户采取其他操作,防止基于复选框和收音机的变化时提供一致的跨浏览器界面。

我认为你可以克服IE的bug用这一招。模糊()元素时,他们的重点! (使用类似$('input[type=radio]').focus(function(){$(this).blur();}); jQuery中或使用纯JavaScript)

+0

不会触发模糊事件两次? – Alex 2011-04-10 18:27:30

+5

IE的行为不是一个错误,它是按照W3C HTML规范。解决方法是将单击事件用于单选按钮和复选框,因为点击事件在它们改变状态时被触发。 – RobG 2011-04-10 20:08:46

0

好吧,一些挖后,这里是我发现了什么。请注意,这适用于Firefox,也可能适用于Firefox。因为在这种情况下,我正在处理内部应用程序,这对我来说已经足够了。

所以,基本上,为了可靠检测在Firefox复选框/单选按钮状态的变化,你需要做两件事情:

  1. 设置自定义Firefox的事件处理程序CheckboxStateChange and RadioStateChange分别复选框,单选按钮。当用户改变的输入时,或者通过脚本修改,使用setAttribute,但是,这些事件不会被触发,当状态在脚本被改变时,使用这些元素的checkedselected属性这些事件将被发射,这是我们为什么需要...
  2. 观看使用Object.watch

标准onchange事件checked属性的变化是没有好处的,因为当用户直接改变值只解雇。

妈的,这件事被打破......

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