2013-10-11 42 views
0

我一直在試圖對兩個JavaScript代碼,一個新的被打開時,使關閉其它的div和使用cookies記住一個div是否由查看器中打開一個結合。使用JavaScript cookie來記住哪些DIV顯示

因爲它現在它成功地記住它的div是開放的,但是當我點擊打開其他分區,它不關閉第一個div。如果我再次點擊重新打開第一個div,它就會按照它應該的那樣關閉第二個div,然後,如果我點擊打開第二個div,它就會像第一個div一樣關閉第一個div。然後,它在那之後很好地工作。但我不明白爲什麼它不會在初始點擊時關閉第一個div。

我非常新的JavaScript,所以我不知道很多關於如何操作它。

<body> 
<script language="javascript"> 
function setCookie (name, value, expires, path, domain, secure) { 
    document.cookie = name + "=" + escape(value) + 
    ((expires) ? "; expires=" + expires : "") + 
    ((path) ? "; path=" + path : "") + 
    ((domain) ? "; domain=" + domain : "") + 
    ((secure) ? "; secure" : ""); 
} 
function getCookie (name) { 
    var cookie = " " + document.cookie; 
    var search = " " + name + "="; 
    var setStr = null; 
    var offset = 0; 
    var end = 0; 
    if (cookie.length > 0) { 
     offset = cookie.indexOf(search); 
     if (offset != -1) { 
      offset += search.length; 
      end = cookie.indexOf(";", offset); 
      if (end == -1) { 
       end = cookie.length; 
      } 
      setStr = unescape(cookie.substring(offset, end)); 
     } 
    } 
    if (setStr == 'false') { 
     setStr = false; 
    } 
    if (setStr == 'true') { 
     setStr = true; 
    } 
    if (setStr == 'null') { 
     setStr = null; 
    } 
    return(setStr); 
} 

function MyFunction2(divName){ 
    setCookie('bookmark_state', false); 
    //hidden val 
    var hiddenVal = document.getElementById("tempDivName"); 

    //hide old 
    if(hiddenVal.Value != undefined){ 
     var oldDiv = document.getElementById(hiddenVal.Value); 
     oldDiv.style.display = 'none'; 
    } 

    //show div 
     var tempDiv = document.getElementById(divName); 
     tempDiv.style.display = 'block';    

    //save div ID 
    hiddenVal.Value = document.getElementById(divName).getAttribute("id"); 

} 

function MyFunction3(divName){ 
    setCookie('bookmark_state', null); 
    //hidden val 
    var hiddenVal = document.getElementById("tempDivName"); 

    //hide old 
    if(hiddenVal.Value != undefined){ 
     var oldDiv = document.getElementById(hiddenVal.Value); 
     oldDiv.style.display = 'none'; 
    } 

    //show div 
    var tempDiv = document.getElementById(divName); 
    tempDiv.style.display = 'block';    

    //save div ID 
    hiddenVal.Value = document.getElementById(divName).getAttribute("id"); 

} 

function checkBookmark() { 
    if (getCookie('bookmark_state') == null) { 
     document.getElementById('bookmark').style.display = 'block'; 
    } 
    if (getCookie('bookmark_state') == false) { 
     document.getElementById('bookmark2').style.display = 'block'; 
    } 
} 

</script> 
<input id="tempDivName" type="hidden"/> 

<div id="bookmark" style="display:none"><a style="color:black" href="#" OnClick="MyFunction2('bookmark2'); return false;">*</a></div> 
<div id="bookmark2" style="display:none"><a style="color:red" href="#" OnClick="MyFunction3('bookmark');">*</a></div> 

<script> 
    checkBookmark(); 
</script> 
</body> 

此外,有沒有使用一個cookie記住的方式,其中幾個的div是開放的(而不是僅僅兩個div)?

回答

0

是的,只要你開的div的狀態存儲在一個對象,並通過序列化JSON它,例如

var states = { 
    "div1": true, // open 
    "div2": false // closed 
} 
setCookie("div_states", JSON.stringify(states));