2009-12-18 140 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

相关问题