在用datatables插件擴展的responsive和select時,我用瞭如下設置的選項,
select: {
style: "multi",
items: "row",
selector: "td:nth-child(2)"
},
responsive: {
details: {
type: 'inline',
}
},
也自己寫了一個點擊的監聽事件,在這個點擊事件的回調裏,我想判斷是否所有的行都被點擊了,然後讓全選被選中。但是由於datatables本身也根據我的選項配置寫了如下的監聽回調,導致.selected的length一直不能等於5。這相當於一個監聽事件同時有了兩個回調函數,datatables的回調用來給tr添加.selected樣式,而我的回調用來統計selected的對象個數。導致的問題就是我不能在datatables回調執行完後再執行我的回調,所以兩邊的值永遠不會相等。
$("#example").on("click", "tbody tr td:nth-child(2)", function (e) {
if ($("#example tbody tr.selected").length == $("#example tbody tr").length) {
$("#tableCheckAll").attr("checked", true);
} else {
$("#tableCheckAll").attr("checked", false);
}
});
解決的思路就是讓我的回調比datatables的回調慢點執行,這就用到了setTimeOut(),這樣我的回調執行時就會比datatables的回調慢一步了。
$("#example").on("click", "tbody tr td:nth-child(2)", function (e) {
setTimeout(function () {
if ($("#example tbody tr.selected").length == $("#example tbody tr").length) {
$("#tableCheckAll").attr("checked", true);
} else {
$("#tableCheckAll").attr("checked", false);
}
}, 1)
});