splice () не работает правильно - PullRequest
0 голосов
/ 15 апреля 2010

Я устанавливаю 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);
}

}
});

1 Ответ

2 голосов
/ 15 апреля 2010
for(i in setCookieHelper){
    if(value == setCookieHelper[i]){

читается как:

for element in setCookieHelper

этот элемент может не быть целым, и это приводит к сбою соединения сращивать.

Если вы хотите соединить в заданной позиции, вы должны использовать для:

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

Сплайс ожидает индекс, с которого начинается «сплайсинг», и количество «сплайсированных» элементов.

...