2011-04-10 104 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屬性的變化是沒有好處的,因爲當用戶直接改變值只解僱。

媽的,這件事被打破......

如果別人就會對此感興趣,我會發布一些代碼。