0

我正在构建带有很多复选框的 html 页面。我想管理一个包含所选项目的 cookie。Cookie 看起来像分隔符1234^9876^3456^在哪里^

当用户选中或取消选中该框时,cookie 会显示添加或删除的 ID 号。

这是我正在使用的功能。除了最后 2 个之外,所有这些都来自知名的第三方开发人员。一些问题是:

  • 每个复选框都有一个onclick事件AddRemoveOrdinal2(...)
  • 用户看到好的勾选和未勾选的汇总数据,甚至刷新页面但是浏览器中存储了几个cookie,相同的名称,相同的路径,不同的内容;
  • 最后一个函数RemoveOrdinal用于从摘要中删除一个项目,它删除 cookie 并且不替换新的。

也许从一个新的想法/程序重新开始会更好

function setCookie(c_name,value,expiredays)
{
 var exdate=new Date();
 exdate.setDate(exdate.getDate()+expiredays);
 document.cookie=c_name+ "=" +escape(value)+
 ((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
}


function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++)
{
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name)
  {
  return unescape(y);
  }
}
}


function del_cookie(name) 
 {
 if (dbug) alert('del_cookie');
 document.cookie = name + '=' + '; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/; ' 
 }

function get_cookie(name) {
   if (dbug) alert('get_cookie'); 
   var dcookie = document.cookie; 
   var cname = name + "="; 
   var clen = dcookie.length; 
   var cbegin = 0; 
   while (cbegin < clen) {
     var vbegin = cbegin + cname.length;
     if (dcookie.substring(cbegin, vbegin) == cname) {
        var vend = dcookie.indexOf (";", vbegin); 
        if (vend == -1) vend = clen; 
        return unescape(dcookie.substring(vbegin, vend));
     } 
     cbegin = dcookie.indexOf(" ", cbegin) + 1; 
     if (cbegin == 0) break;
  } return null;
} 


function set_array(name, ary, expires) {
   if (dbug) alert('set_array'); 
   var value = ''; 
   for (var i = 1; ary[i]; i++) {
   value += ary[i] + '^';
   } 
   set_cookie(name, value, expires);
 } 


function AddRemoveOrdinal2(id, ordinal, id_checkbox){ 
var foo = document.getElementById(id_checkbox).checked;
if (foo == false)    { 
    get_array(cookieName, myarray);
    var myarray2 = init_array(); 
    for (var i=0; i<next_entry(myarray); i++) { 
        if(myarray[i] != ordinal){ 
            myarray2.push(myarray[i]); 
            }
        }
    del_cookie(cookieName);
    set_array(cookieName, myarray2, expires);
    myarray = myarray2;
    // Code here to display:none/block
    }
else {
    get_array(cookieName, myarray);
    myarray.push(ordinal); 
    set_array(cookieName, myarray, expires);
    }
 get_array(cookieName, myarray); 
 if(myarray.length > 1){ 
    // Code here to display:none/block elements
    }
else {
    // Code here to display:none/block elements 
       }


function RemoveOrdinal(id, ordinal, id_checkbox){ 
get_array(cookieName, myarray); 
var myarray2 = init_array(); 
for (var i=0; i<next_entry(myarray); i++) {
    if(myarray[i] != ordinal){ 
        myarray2.push(myarray[i]); 
    }
}
del_cookie(cookieName); 
set_array(cookieName, myarray2, expires); 
myarray = myarray2;
esconder(id); 
document.getElementById(id_checkbox).checked=false; 
 get_array(cookieName, myarray); 
 if(myarray.length > 1){ 
    // Code here to display:none/block elements
else {
    // Code here to display:none/block elements
}
}

负载

var cookieName = 'ordinals';  
var myarray = init_array();
var timeToKeep = 60000*60*24*7; 
var expires = new Date();
expires.setTime(expires.getTime() + timeToKeep); 
var x = get_cookie(cookieName);
if ( !x || x == null) { 
    set_array(cookieName, myarray, expires);
}
4

0 回答 0