0

読んでくれてありがとう。
複数のページにまたがるページ化されたデータセット (SPRY XML データセットから作成) があります。
チェックされたチェックボックスがページ間で失われたため、 jquery Cookie https://github.com/carhartl/jquery-cookieを使用して、どのチェックボックスがチェックされているかを保存します。次のコードを使用して Cookie を設定しました (stackoverflow の投稿から)。

$(document).ready(function(){
    // find the div named books containg rows and a checkbox in the end
    $("#books").on("click",function(){



    $(":checkbox:checked.chkbCsm").each(function() {//alert("test");
    var mycookie = $.cookie($(this).attr('value'));
    if (mycookie && mycookie == "true") {
        $(this).prop('checked', mycookie);
    }
});

$(":checkbox:checked.chkbCsm").change(function() {


    $.cookie($(this).attr("value"), $(this).prop('checked'), {
        path: '/',
        expires: 365
    })
});


});

テーブルは動的に作成されるため、.on 内にラップされます。Cookie が正しく設定されている。

Cookie 配列から値を読み取ってチェックボックスを復元するために、次のスニペットを作成しました。

$(document).ready(function() {


var cookies = get_cookies_array();
var temp = [];

// keep only cookies relevant in temp
for( var name in cookies) {

  if (!isNaN(name) && cookies[name]=="true") {

    temp.push(name);

 }

}

//restore all cookies from temp array   
    for( i=0 ; i<temp.length ; i++) {


var text=temp[i];
$('input[value='+text+']').prop('checked', true);
}


});//document ready

コードは通常動作しますが、問題があります。
チェックボックスがチェックされ、Cookie が設定され、次のページに移動してから戻るとします。
クッキーはチェックボックスを正しく復元します。ただし、チェックボックスをオフにすると、クリックは無視され、Cookie にはチェックされたチェックボックスが含まれていると見なされます。チェックとチェックをもう一度繰り返すと、Cookie は正しく false に設定されます (つまり、チェックを外します)。
これはおそらく、初めて .change() 関数がトリガーされないことを意味しますが、これは間違いなく望ましくありません。
さらに、チェックボックスの状態がプログラムで変更された場合、 .change() がトリガーされないことを理解しています。
私はいくつかのルートを試しました( .triggerHandler("change"); を .prop() の隣に置きます)、調査しましたプログラムで行われたチェック状態の変更に対応するチェックボックスの変更イベントが必要で、チェックボックスの変更イベントがトリガーされないのはなぜですか? しかし、私の問題は解決しませんでした。

これを修正する方法についてのアイデアは大歓迎です。どうもありがとう

4

1 に答える 1