2010-04-15 88 views
0

我正在爲每個點擊的導航容器設置一個cookie。splice()無法正常工作

它設置一個連接並設置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); 
} 

} 
}); 

回答

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; 
    } 
} 

拼接預期指數從哪裏開始「拼接」和「拼接」元素的量。

+0

謝謝,我聽到你在說什麼......也許我沒有使用正確的方法'splice()'。我想要的只是需要刪除找到的號碼。 – adardesign 2010-04-15 17:56:37

+1

是啊,這是你想要的:)只是把它取代爲一個正常的我固定最後一個正是你需要:) – fmsf 2010-04-15 18:42:15