js回調遇到的一個問題

在用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)
});

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章