2011-05-13 103 views
4

我有一個綁定到INPUT元素(複選框或收音機)的單擊事件的Javascript函數。該函數檢查DOM元素的「checked」屬性,並根據是否設置來採取行動。觸發DOM元素事件時的事件順序

如果用戶單擊GUI中所表示的元素,則checked屬性的狀態反映GUI中的外觀(也就是說,如果用戶點擊激活元素,則checked屬性爲true)。但是,如果我觸發點擊事件(使用jQuery),那麼當調用綁定到點擊函數時,檢查checked屬性的狀態不會顯示新的狀態。但是,GUI不會更新以呈現實際狀態的正確表示。

這些活動執行時是否有定義的順序?對於我來說,在設置checked屬性之前調用事件偵聽器似乎很奇怪。

+0

是的,我有在輸入元素之前看過這個。元素狀態在onclick事件後更新。我很確定這在所有瀏覽器中都是一樣的。 – 2011-05-13 16:01:13

+0

@Richard我的演示不同意:http://jsfiddle.net/g4aVm/ – 2011-05-13 16:01:46

+0

@Sime - 檢查您的演示:) – 2011-05-13 16:02:50

回答

5

有趣。通過jQuery調用的.click()具有與直接調用元素上的.click()不同的行爲。在這裏看到:

http://jsfiddle.net/g4aVm/6/

我想借此表明,jQuery是在這裏做一些非標/車。

(我是輕微老式的,不與簡單DOM的東西信任jQuery的。沒有太多的使用庫複製已經存在的東西來獲得,但是這是一個不同的討論。)

+0

看起來像一個jQuery bug ... – 2011-05-13 16:41:25

+0

jQuery團隊說,聽取正確的事件是'改變',而不是'點擊'。請參閱bugs.jquery.com/ticket/9274上的Šime's ticket,以及jsfiddle.net/rwaldron/H7qry/4上的JSFiddler代碼) – Zhami 2011-05-14 00:57:35

+0

嗯......他們的回覆沒有說服力。看起來jQuery目前的行爲會造成混淆,但收效甚微。我猜想這是一個漏洞問題/錯誤,現在改變它會破壞現有的網站。 – edeverett 2011-05-14 07:29:08