2009-12-18 274 views
0

我正在學習,如果這是一個明顯的錯誤,請善待。爲什麼我的cookie沒有設置?

/*set cookie*/ 
function setCookie(name,value,days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     var expires = "; expires="+date.toGMTString(); 
    } 
    else var expires = ""; 
    document.cookie = name+"="+value+expires+"; path=/"; 
} 

function readCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') c = c.substring(1,c.length); 
     if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 
    } 
    return null; 
} 

function eraseCookie(name) { 
    setCookie(name,"",-1); 
} 


$(window).load(function() { 
//check for the cookie 
    var language = readCookie('language'); 
//if null show red 
    if (language!=null) 
    { 
     $('.blue').hide(); 
     alert('No cookie set'); 
    } 
//if null show red 
    else if (language!=red) 
    { 
     $('.blue').hide(); 
     alert('The cookie is red'); 
    } 
//if blue show blue 
    else { 
     $('.red').hide(); 
     alert('The cookie is set to blue'); 
    } 


    $('#blue').click(function() { 
      $('.red').hide(); 
      $('.blue').show(); 
      setCookie('language','blue', 30); 
      alert('The cookie is set to blue'); 
     }); 

    $('#red').click(function() { 
      $('.red').show(); 
      $('.blue').hide(); 
      setCookie('language','red', 30);     
      alert('The cookie is set to red'); 
     }); 
}); 

謝謝你。

回答

2

學習使用Firebug是最好的建議。另一個有用的工具是着色編輯器。即使是SO也提供了這種幫助。注意行:

else if (language!=red) 

「紅」也不着色爲一個字符串,所以通過不站出來站出來。在原始代碼的某處是否有一個名爲「red」的變量?如果不是,則將語言與undefined進行比較。

另外,還要考慮遵循此語句行:

else if (language!='red') { 
     $('.blue').hide(); 
     alert('The cookie is red'); 

您剛剛測試過的cookie值是不是紅色,而是提醒你,這是。你讓第一次測試類似的錯誤:

if (language!=null) { 
     $('.blue').hide(); 
     alert('No cookie set'); 

language不爲空,但顯示消息表明,它是。

這與您的問題無關,但您可以進行一些簡化。首先,jQuery在String上定義trim方法來刪除前導和尾隨空白。如果這在readCookie而不是while (c.charAt(0)==' ')循環中使用。

另一個改進是,選擇使用一系列if塊顯示的元素的當前技術不能很好地擴展。你的作業是使用字符串操作,而不是更好地處理任意數量的元素,然後添加「.green」,「。yellow」,「.magenta」和「.cyan」元素。您可能需要更改顯示全部的默認行爲。 顏色元素隱藏它們。將對象用作關聯數組也可能有所幫助。

+0

謝謝。這是我的問題主要是我不知道大多數地方的預期。我使用記事本++,所以有着色,但它並不突出,因爲我不知道應該在那裏。 我不明白爲什麼它看起來我設置cookie setCookie('language','blue',30); 過期30天,但當我檢查在Firefox中的cookie信息有沒有cookie。 – Laura 2009-12-19 00:07:29

+0

你如何檢查cookie?使用JS? FF的「Cookies」對話框?附加?你使用的是什麼版本的FF?當我在FF 3.5中測試它時,您的代碼爲我設置了一個cookie。 – outis 2009-12-19 04:37:22

+0

是的,使用FF 3.5.6中的開發工具欄。 Cookies已啓用。 非常感謝您的幫助。 – Laura 2009-12-19 08:01:15

2

如果你在這裏學習你的問題的最佳答案可能會有一些調試技巧。你用什麼來調試?

您是否嘗試過Firefox中的Firebug。 http://getfirebug.com/這會讓你一次一行地瀏覽你的代碼,並且檢查它正在做什麼,真正傳遞給函數的值以及你分配給document.cookie的字符串。

+0

是的,我使用的是Firebug。謝謝。 – Laura 2009-12-18 23:25:35

+0

Firebug教程:http://www.evotech.net/blog/2007/06/introduction-to-firebug/,http://www.webmonkey.com/tutorial/Build_Better_Pages_With_Firebug,http://www.digitalmediaminute.com/screencast/firebug-js/ – outis 2009-12-18 23:27:06

相關問題