2010-08-26 56 views
3

我正在嘗試編寫一個腳本,其中一組複選框的未檢查值從cookie中刪除。我在下面使用jQuery的cookie插件是我調用複選框時調用的當前函數;如何從cookie中使用jQuery刪除未經檢查的複選框值?

<script type="text/javascript"> 
jQuery(document).ready(function($){ 
    $("input[type=checkbox]").each(function() { 
     $(this).change(updateCount); 
    }); 

    updateCount(); 

    function updateCount() { 

     var val; 
     var my_cookie 
     var new_my_cookie; 

    $(':checkbox:checked').each(function(){ 
     val= $(this).val(); 
     my_cookie=$.cookie("chosen_ones"); 
     $.cookie("chosen_ones", null); 
     new_my_cookie=my_cookie+"|"+val; 
     $.cookie("chosen_ones", new_my_cookie); 
    }); 

    //somehow need to remove values from cookie when unchecked here 

     var length = $.cookie("chosen_ones").split("|").length; 
     length=length-1; 
     $("#count").text(length); 
     $("#status").toggle(length >= 0); 
    }; 
    }); 
</script> 

任何幫助將受到歡迎。

回答

1

如果你需要一個沒有json2的答案(我的意思不是每個人都知道json2),你可以使用這個答案; (如果你喜歡它,也許你能評價它:d)

<script type="text/javascript"> 

//Adds new uniqueArr values to temp array 
    function uniqueArr(a) { 
    temp = new Array(); 
    for(i=0;i<a.length;i++){ 
     if(!contains(temp, a[i])){ 
     temp.length+=1; 
     temp[temp.length-1]=a[i]; 
     } 
    } 
    return temp; 
    } 


    //Will check for the Uniqueness 
    function contains(a, e) { 
    for(j=0;j<a.length;j++)if(a[j]==e)return true; 
    return false; 
    } 

jQuery(document).ready(function($){ 
    $("input[type=checkbox]").each(function() { 
     $(this).change(updateCount); 
    }); 

    updateCount(); 



    function updateCount() { 

     var val; 
     var my_cookie=""; 
     var new_my_cookie=""; 
     var cookie_array; 
     var new_cookie_array; 
     var new_cookie_string=""; 
     var number=0; 
     var temp_cookie=""; 

     my_cookie=$.cookie("chosen_ones"); 

    $(':checkbox:checked').each(function(){ 
     val= $(this).val(); 
     if((val!=null)&&(val!="")){ 
     my_cookie=val+"|"+my_cookie; 
     } 


    }); 

    new_cookie_array=uniqueArr(my_cookie.split("|")); 

    $.each(new_cookie_array, function(index, values) { 
      if((values!="")&&(values!="null")&&(values!=null)){ 
       temp_cookie=values+"|"+temp_cookie; 
      } 
     }); 

    $.cookie("chosen_ones", null); 
    $.cookie("chosen_ones", temp_cookie); 

    var cookie_array=$.cookie("chosen_ones").split("|"); 

    $(':checkbox:not(:checked)').each(function(){ 
     val= $(this).val(); 
     $.each(cookie_array, function(index, values) { 
       if((values==val)&&(values!=null)&&(values!="")&&(values!="null")&&(values!="")){ 
       cookie_array[index]=""; 
      } 
     }); 
    }); 

     new_cookie_array=uniqueArr(cookie_array); 

     $.each(new_cookie_array, function(index, values) { 
      if((values!="")&&(values!=null)&&(values!="null")){ 
       new_cookie_string=new_cookie_string+"|"+values; 
      } 
     }); 

     $.cookie("chosen_ones", null); 
     $.cookie("chosen_ones", new_cookie_string); 
     alert($.cookie("chosen_ones")); 
     var temping_string=$.cookie("chosen_ones"); 
     $("#count").text(temping_string.split("|").length-1); 
     $("#status").toggle(temping_string.split("|").length-1 >= 0); 
    }; 
    }); 
</script> 
1

不刪除該值。在每個複選框中,您只需獲取所有選中的複選框(如現在那樣),將它們添加到一個字符串中(或使用json?),將它們作爲「checkedboxes」或其他東西存儲在cookie中。如果取消選中複選框,則可以運行相同的功能,獲取所有選中的複選框,只保留未選中的複選框,並覆蓋當前Cookie中的複選框,不是?

//編輯

在cookie中寫了一個JSON對象的例子。在多個頁面上工作:-) http://labs.joggink.be/json-checkbox-cookie/

+0

刪除Cookie可以不這樣做。一旦頁面URL更改。新的複選框需要檢查。我不能放鬆以前的數據。 – JohnRoach 2010-08-26 09:03:34

+0

在這種情況下,將其存儲在數組中,使用json解析它,將json對象存儲在cookie中。這樣,你可以使用複選框#編號作爲數組鍵,並將值設置爲1或0. 這是一個真正的痛苦屁股陣列不工作與餅乾... – joggink 2010-08-26 09:25:03

+0

你可以給我一個代碼示例請? – JohnRoach 2010-08-26 09:29:52

0

書寫,閱讀和使用jquery

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> 
<script type="text/javascript"> 
    $(function() { 
     $("#btnWrite").click(function() { 
      $.cookie("Name", $("#txtName").val()); 
     }); 
     $("#btnRead").click(function() { 
      alert($.cookie("Name")); 
     }); 
     $("#btnDelete").click(function() { 
      //Old Code 
      //$.removeCookie("Name") 
//New code 
$.removeCookie("CookieName",{path:'your path'}); 
     }); 
    }); 
</script>