iT邦幫忙

0

已刪文

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
greenriver
iT邦研究生 5 級 ‧ 2023-07-25 15:33:40

我是沒用過DataTable
/images/emoticon/emoticon16.gif
不過你可以試看看修改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就好。

0
Oo_花之舞__oO
iT邦新手 1 級 ‧ 2023-07-25 15:54:36

那個

你的問題都不太初學者

不是初學者問題

比較像是工作用的

froce iT邦大師 1 級 ‧ 2023-07-25 17:09:53 檢舉

工作用的也沒差啊,問題問得有意思自然就有人會回答

沒人說沒意思阿 只是說跟標題無關而已

0
揮揮手
iT邦研究生 5 級 ‧ 2023-07-25 16:28:11

請先測試 假資料是否能正確執行
可以正確執行的話
那跟同步非同步比較有關係

再來我推測原因是 寫在createdCell 底下的關係
通常 套件這樣命名 代表只有創建時有執行

你比對資料的部分 拔出來執行看看

看了你console 有執行
那getData 可能要查一下 狀態變化
拔出去宣告成 全域試試看

以上都不要管 只是腦袋想到就打 看到你console了 推論
因為你 rowData.isChanged = true;
沒複寫回去 getData
你改變的是rowData 不是 getData

1
froce
iT邦大師 1 級 ‧ 2023-07-26 09:54:56

說真的,前面就跟你說過了,你的流程設計要簡化。
譬如下面兩種方案:

  1. 不要記錄歷程,按鈕就直接送去後端做變化
  2. 前端紀錄一開始的狀態,和按按鈕的步驟,等最後要送出再去判斷這顆按鈕最後的狀態。把初始狀態和所有步驟做and運算不就能得到最後的結果?

jQuery要做你現在這類型的設計很麻煩,因為我做過,整個流程設計你要頭腦很清醒才行,並且以後維護並不好維護。

我要發表回答

立即登入回答