0

チェックボックスがたくさんあるhtmlページを作成しています。選択したアイテムを含む単一の Cookie を管理したい。クッキーはセパレーター1234^9876^3456^がどこにあるかのように見えます。^

ユーザーがボックスをオンまたはオフにすると、Cookie は追加または削除された ID 番号を表示します。

ここに私が使用している機能があります。最後の 2 つを除くすべては、既知のサードパーティ開発者によるものです。いくつかの問題は次のとおりです。

  • 各チェックボックスにはonclickイベントがありAddRemoveOrdinal2(...)ます。
  • ユーザーには、チェック済みおよび未チェックのサマリー データが表示され、ページを更新しても、同じ名前、パス、異なるコンテンツの複数の Cookie がブラウザーに保存されます。
  • 最後の関数RemoveOrdinalは、概要から項目を削除するために使用されます。これは Cookie を削除し、新しい 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