2013-03-06 89 views
1

我覺得很奇怪,.on()函數在ajax負載上僅觸發一次/兩次事件。Jquery ON函數僅在ajax負載上觸發一次或兩次

下面是一個示例代碼:

$(document).on('click', '.cbxCheckAll', function(e) { 
alert(this.checked); 
$(this).parents('table').find('input.cbxDelete:checkbox').attr('checked', this.checked); 
}); 

場景: 所以基本上,我有了用戶的列表下拉。在下拉菜單中選擇用戶後,它會立即通過ajax將選定用戶的信息加載到div上。然後在該div上,我有多個複選框,並帶有「全選」選項。

單擊「全選」後,它確實選中了所有複選框。再次點擊,它沒有勾選複選框。那麼,它確實有效。但是當我再次點擊(第三次)時,它不再工作。它似乎只能在第二次點擊中起作用。

您可能注意到,我有一個alert(),顯示「全選」複選框的值。它似乎每次點擊它(第3,第4等)時都會觸發,但檢查/取消選中部分不是。

我剛剛更新了我的jquery版本到最新(1.9)。由於.live()最新版本被刪除,我正在使用版本(1.7)和.live()函數,並將其更改爲.on()

在此先感謝!

+1

確保使用[''console.log()'](http://stackoverflow.com/questions/4743730/what-is-console-log-and-how-do-i-use-它)而不是'alert()' – Dom 2013-03-06 14:51:47

+0

@Dom聲明,alert保留線程,console.log讓它繼續前進。 – 2013-03-06 14:54:42

+1

(可能)與您的問題無關,但「.parents('table')」選擇此元素的每個表的祖先。如果你嘗試「.closest('table')」,你只能選擇最接近的'表'祖先。 – DoXicK 2013-03-06 14:54:45

回答

0

在處理checked屬性時,您必須在最近版本的jQuery中使用.prop()

$(document).on('click', '.cbxCheckAll', function(e) { 
    //alert(this.checked); 
    console.log(this.checked); 
    $(this).parents('table').find('input.cbxDelete:checkbox').prop('checked', this.checked); 
}); 
+0

謝謝凱文B!這完美的作品!只是想知道,爲什麼我的代碼上述不起作用?我在jQuery 1.7版本中使用它,它完美地工作。但現在我升級到1.9了,現在不再了? – basagabi 2013-03-06 15:17:39

+0

這是否解釋了爲什麼它只能工作兩次? – 2013-03-06 15:18:55

+0

是的,這是它背後的理由只能工作兩次,雖然我不完全確定邏輯爲什麼會發生。 1.9切換回1.6中引入的更嚴格的.attr/.prop,並在1.6.1中刪除如果您想研究它,請成爲我的客人,但是您會研究爲什麼某種方法無法按預期工作你以意想不到的方式使用它。 – 2013-03-06 15:23:25