2010-08-26 55 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>