0

クリックされたナビゲーションコンテナごとにCookieを設定しています。

結合される配列を設定し、Cookie値を設定します。もう一度クリックすると、アレイから削除されます。

どういうわけかバグがあります。

他の要素をクリックした後にのみスプライスします。そしてそれは奇妙な振る舞いをします。

spliceそれは正しい方法ではないかもしれません

var navLinkToOpen;
var setNavCookie = function(value){
var isSet = false;
var checkCookies = checkNavCookie()
  setCookieHelper = checkCookies? checkCookies.split(","): [];
  for(i in setCookieHelper){
    if(value == setCookieHelper[i]){
       setCookieHelper.splice(value,1);
       isSet = true;
}
}
if(!isSet){setCookieHelper.push(value)}
setCookieHelper.join(",")
 document.cookie = "navLinkToOpen"+"="+setCookieHelper;
}


var checkNavCookie = function(){
var allCookies = document.cookie.split( ';' );
for (i = 0; i < allCookies.length; i++ ){
 temp = allCookies[i].split("=")
 if(temp[0].match("navLinkToOpen")){
  var getValue = temp[1]
  }
 }
return getValue || false
}



$(document).ready(function() {
  $("#LeftNav li").has("b").addClass("navHeader").not(":first").siblings("li").hide()
  $(".navHeader").click(function(){
$(this).toggleClass("collapsed").nextUntil("li:has('b')").slideToggle(300);
setNavCookie($('.navHeader').index($(this)))
return false
  }) 

var testCookies = checkNavCookie();
 if(testCookies){
finalArrayValue = testCookies.split(",")
for(i in finalArrayValue){
 $(".navHeader").eq(finalArrayValue[i]).toggleClass("collapsed").nextUntil(".navHeader").slideToggle   (0);
}

}
});
4

1 に答える 1

2
for(i in setCookieHelper){
    if(value == setCookieHelper[i]){

次のように読みます:

for element in setCookieHelper

この要素はintではない可能性があり、スプライスが失敗します。また、スプライスを試みる前に、要素にスプライスする位置が含まれているかどうかを確認し、その値がsetCookieHelperの長さ内にあるかどうかを確認する必要があります。

特定の位置でスプライスする場合は、次の目的で使用する必要があります。

for(i=0;i<setCookieHelper.lenght;i++){
     if(value == setCookieHelper[i]){
         setCookieHelper.splice(i,1);
         isSet = true;
     }
}

spliceは、「スプライシング」を開始するインデックスと「スプライシングされた」要素の量を想定しています。

于 2010-04-15T17:49:40.130 に答える