在动态创建的复选框数组(jquery)中从cookie检查复选框

时间:2013-05-05 18:58:26

标签: jquery jquery-cookie

非常感谢您的阅读 我有一个分页数据集(由SPRY XML Dataset创建),跨越多个页面 我使用jquery cookies 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设置正确。

我创建了以下代码段,通过读取值来恢复复选框 cookies数组。

$(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包含已选中的复选框。 如果重复检查再次取消选中,则cookie正确设置为false(即取消选中) 这意味着,可能是第一次没有触发.change()函数,这绝对是不需要的 另外我明白,如果 复选框以编程方式更改状态。不会触发.change() 我尝试了几个路由(把.triggerHandler(“更改”);放在.prop()旁边 并研究了Need checkbox change event to respond to change of checked state done programmaticallyWhy isn't my checkbox change event triggered?,但没有解决我的问题。

任何想法都欢迎如何解决这个问题。 非常感谢

1 个答案:

答案 0 :(得分:0)

为了帮助任何感兴趣的人,通过在更新数据集分页区域(我已包含Spry Observer详细信息)后添加.trigger(“click”),问题似乎得到解决(至少在Firefox中...),即< / p>

myObserver = new Object;
myObserver.onPostUpdate = function(notifier, data)
{       
    $(document).ready(function() {

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

for( var name in cookies) {

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

    temp.push(name);
 }

}
    for( i=0 ; i<temp.length ; i++) {
var text=temp[i];
$('input[value='+text+']').prop('checked', true).triggerHandler("change");
}

});//document ready

$(document).ready(function() {
**$("#books").trigger("click");**
});
};



Spry.Data.Region.addObserver("bibliapv", myObserver);

由于某种原因,似乎错过了已经选中的复选框中数据集页面之间导航后的第一次点击。非常感谢再次阅读。