我有一個帶有長表的網頁來顯示資料。使用 JQuery Tablesorter 我使表格可排序。
頁面的最后一列包含復選框(帶有類chk),以允許用戶選擇多個條目。在表頭中還有一個復選框(帶有 idcheckall且沒有類)。通過單擊此復選框,所有其他復選框的值應翻轉。由于頁面需要一些時間才能完全加載,所以我使用該$(window).load()功能而不是$(document).ready().
我得到以下 JavaScript 代碼:
$(window).load(function() {
$('#checkall').change(function() {
if ($('#checkall').is(":checked")) {
$('.chk').prop('checked', true);
} else {
$('.chk').prop('checked', false);
}
});
});
這在 Chromium 中按預期作業,但在 Firefox 中則不然。在玩弄了代碼之后,似乎在 Firefox 中甚至沒有設定 Change-Listener。我在內部函式代碼中的任何內容都不會在選中復選框時執行,而$(window).load()函式會按預期執行。當我click()改為添加處理程式或使用on("change, function(){...}).
這是一個 JQuery 錯誤還是我做錯了什么?
我將 JQuery 3.6.0 與 JQuery Migrate 1.4.1 一起使用。
更新:
我發現這似乎是一個時間問題/競爭條件。如果我有時重新加載頁面,它在 Firefox 中也可以在大約 10 次嘗試中運行。但我仍然不知道原因是什么以及如何解決它。
uj5u.com熱心網友回復:
這是一種使用事件委托的方法。document.ready您需要一個在觸發時存在于 DOM 中的元素。可以說元素是表格。你會寫:
$(function() {
$("#the-table").on("click", "#checkall", function() {
// toggle stuff
});
});
在這種情況下,事件處理程式系結到表。它將捕獲所有點擊,如果事件的發起者是復選框,它將觸發回呼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/437472.html
標籤:javascript jQuery 事件
上一篇:在點擊功能內使用OR
