我面臨着一個奇怪的行爲,在jQuery 1.4與點擊事件。這個想法是點擊一個下拉列表(change()
),然後使用它們的click()
函數將兩個複選框的集合顛倒過來。
如果我必須這樣做,這是因爲複選框上的click
更新了其他字段,所以我認爲不是反轉複選框checked
屬性,而是調用兩次點擊所有複選框。jQuery奇怪的行爲()點擊()點擊()
儘管所有複選框都被正確反轉了兩次,但我在click
函數上使用的.length
在操作過程中失去了正確的計數,並且每次都返回1以上。
要在這裏明確是代碼的理念:
//The 'click' function
$('input:checkbox').click(function(){
$(this).parent().find("input:checkbox:checked").length;//<- this one's not returning the right count
//some code updating other fields thanks to the 'length' of the checkboxes
});
//The dropdown function
$('select.dropdown').change(function(){
$(this).parent().find("input:checkbox").click();//Invert the first time
$(this).parent().find("input:checkbox").click();//Invert a second time
});
當我手動檢查並取消領域,一切都可以正常使用,只是在下拉菜單中調用它的長度計數是錯誤的。
這裏有兩個場景,更解釋了深入的問題我遇到:
- 如果我選擇的東西從下拉列表中(長度失敗),然後取消並重新檢查複選框,則計數爲對。
- 如果我在
click()
函數的末尾添加了一個錯誤代碼,它除了在javascript調試器控制檯上引發錯誤外,還可以正常工作。順便說一句,我不能保留這個解決方案,因爲在這種情況下另一個函數失敗。
乾杯,
尼古拉斯。
但是,這將不會觸發複選框自己的onclick處理程序,因爲OP需要。 – 2010-08-13 15:28:51
@Marc - 也許我誤解了這個問題。我認爲重點是如何反轉複選框狀態。如果OP需要運行附加的點擊處理程序,則將使用已經使用的方法。 – user113716 2010-08-13 15:33:17
@Marc:確切地說。在這種情況下,click()將不會被調用,因此我將無法更新其他字段。 @帕特里克:這不僅僅是關於複選框。乾杯。 – Nicolas 2010-08-13 15:35:15