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 设置正确。

我创建了以下代码段,通过读取 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("change"); 放在 .prop() 旁边)并研究了需要复选框更改事件来响应以编程方式完成的选中状态更改,为什么我的复选框更改事件没有被触发?但没有解决我的问题。

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

4

1 回答 1

0

为了帮助任何有兴趣的人,问题似乎解决了(至少在 Firefox 中......)通过在更新数据集分页区域后添加一个 .trigger("click") (我已经包含了 Spry Observer 详细信息),即

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);

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

于 2013-05-06T13:00:10.807 回答