已刪文
我是沒用過DataTable
不過你可以試看看修改createdCell
裡的code
createdCell: function (td, cellData, rowData, row, col) {
var switchId = 'argp_' + rowData.id;
var switchElement = $(td).find('#' + switchId);
//新增click事件,在這裡處理點擊事件
switchElement.on('click', function() {
rowData.isChanged = !rowData.isChanged
});
switchElement.change(function () {
if ($(this).is(':checked')) {
rowData.argp = true;
//將這裡的isChanged移除
} else {
rowData.argp = false;
//將這裡的isChanged移除
}
}
}
isChanged
不能跟checked
的狀態綁定在一起。
兩個是不同的狀態。
isChanged
的邏輯是,一開始是false,代表資料沒改變。
當click第一次時,會改變checked
的狀態,所以isChanged
就變成true,
當click第兩次時,checked
又會變成原本狀態,資料沒改變,所以isChanged
又會變成false。
所以直接這樣使用rowData.isChanged = !rowData.isChanged
就好。
請先測試 假資料是否能正確執行
可以正確執行的話
那跟同步非同步比較有關係
再來我推測原因是 寫在createdCell 底下的關係
通常 套件這樣命名 代表只有創建時有執行
你比對資料的部分 拔出來執行看看
看了你console 有執行
那getData 可能要查一下 狀態變化
拔出去宣告成 全域試試看
以上都不要管 只是腦袋想到就打 看到你console了 推論
因為你 rowData.isChanged = true;
沒複寫回去 getData
你改變的是rowData 不是 getData
說真的,前面就跟你說過了,你的流程設計要簡化。
譬如下面兩種方案:
jQuery要做你現在這類型的設計很麻煩,因為我做過,整個流程設計你要頭腦很清醒才行,並且以後維護並不好維護。