2011-08-08 27 views
0

注意:所有這一切都在鉻如何模擬jQuery中的點擊事件

我想測試響應點擊複選框的東西。我意識到jQuery.click()存在,但它似乎與「本機」點擊不同,在點擊處理程序期間,複選框的狀態尚未更新(因此複選框未選中,您調用.click() ,在處理程序中,複選框仍處於未選中狀態。如果您實際上單擊該框,則在處理程序中將檢查狀態)。

我對混亂的問題道歉,這裏是一個小提琴http://jsfiddle.net/XBhWy/

點擊foo的按鈕,注意按鈕處理程序說,它已得到遏制,但複選框處理程序說,它沒有被選中(即使UI顯示覆選標記)。現在,點擊複選框本身。請注意,點擊事件處理程序正在報告您期望它報告的內容。

我的問題是如何模擬實際上單擊框時發生的相同事情。現在

,我參加了一個刺在一個更好的模擬事件這樣

$.fn.check = function() { 
    if ($(this).is(':checked')) { 
    $(this).attr('checked', 'checked'); 
    } else { 
    $(this).removeAttr('checked'); 
    } 
    $(this).click(); 
} 

很不幸(有點混亂),沒有工作。

以前有誰碰到過這個?它可以完成嗎?

請注意,我不是在尋找click方法。

+3

你試過http://api.jquery.com/click/? –

+0

因爲這不起作用.....? –

回答

1

看起來複選框click()中聲明的用戶指定的函數在複選框真正更新之前觸發。我玩弄了它,發現change()聽衆按預期行事。

jsfiddle

+0

更改是一個好主意,在發佈此消息之前,我的頭撞擊至少一個小時。我想知道是否有人有關於觸發限制的某種矩陣,會非常有用 –

+0

事件觸發時缺少的一致性很可能是一個錯誤。我在官方的jquery bug跟蹤器上提交了一個[bug報告](http://bugs.jquery.com/ticket/10005)。 – K4emic

1

從​​:

雖然.trigger()模擬的事件激活,完成與合成事件對象,它不完美地複製天然存在的事件。

所以這是一個衆所周知的事情,我猜。在這種情況下,它會改變某些事物的順序。

+0

是啊,我正在尋找的是一種解決方法 –