2013-05-05 143 views
0

非常感謝您的閱讀。
我有一個頁面數據集(從SPRY XML數據集創建)跨越多個頁面。
我使用jquery cookies https://github.com/carhartl/jquery-cookie來保存哪些複選框被選中,因爲選中的複選框在頁面之間丟失。我已經使用 下面的代碼來設置的Cookie(從計算器柱)複選框從c​​ookie中檢查動態創建的複選框數組(jquery)

$(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 
    }) 
}); 


}); 

擠包。對之內,因爲是動態創建的表。餅乾設置正確。

我已經創建了以下代碼片段,通過從 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仍被認爲包含複選框。 如果您再次選中取消選中,則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?,但沒有解決我的問題。

任何想法歡迎如何解決這個問題。 非常感謝

回答

0

爲了幫助任何有興趣的人,通過在更新數據集分頁區域後添加.trigger(「click」),似乎解決了問題(至少在Firefox中)(我已包含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); 

看來,由於某種原因,在一個已經選中的複選框的數據集頁面之間的導航後的第一個點擊被錯過了。非常感謝您的閱讀。