非常感谢您的阅读。
我有一个跨越多个页面的分页数据集(从 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() 旁边)并研究了需要复选框更改事件来响应以编程方式完成的选中状态更改,为什么我的复选框更改事件没有被触发?但没有解决我的问题。
欢迎任何想法如何解决这个问题。非常感谢