2011-12-09 36 views
0

以下switch语句不捕获不存在的cookie。如何检查JavaScript中的空cookie?

switch (stateCookie) { 
        case 'Virginia': 
         window.location = '/Teacher-Login/VA'; 
         break; 
        case 'North Carolina': 
         window.location = '/Teacher-Login/NC'; 
         break; 
        case 'South Carolina': 
         window.location = '/Teacher-Login/SC'; 
         break; 
        case null: 
         window.location = '/Teacher-Login/VA'; 
         break; 
        case '': 
         window.location = '/Teacher-Login/VA'; 
        default: 
         window.location = '/pages/state-login/login.html'; 

好吧,我已经试过几件事情,但我还是莫名其妙地有这个麻烦。这里是我现在的代码:

$('#welcome select').change(function() { 
    var stateSelected = $('option:selected', this).val(); 
    var stateCookie = getCookie("ia_state"); 
    if(stateSelected != stateCookie) 
    { 
     setCookie('ia_state', stateSelected); 
     switch (stateCookie) { 
      case 'Virginia': 
      case null: 
      case '': 
       window.location = '/Teacher-Login/VA'; 
       break; 
      case 'North Carolina': 
       window.location = '/Teacher-Login/NC'; 
       break; 
      case 'South Carolina': 
       window.location = '/Teacher-Login/SC'; 
       break; 
      default: 
       window.location = '/pages/state-login/login.html'; 
} 
} 
}); 

switch语句正在评估,但它总是会进入默认情况。如果cookie为空/未定义,我还没有弄清楚如何捕获它。

+0

见http://jsfiddle.net/uwsaf/ ...是无二'null'也超过' '''和'0'返回FALSE。尝试移动案例的顺序 – andlrc

+0

'var stateCookie = $ .cookie(“ia_state”)|| '';'使用jQuery cookie getter和grant,你会得到一个cookie或空字符串。 –

+0

你刚刚回答了某人的问题,说这是未定义的。这与getCookie函数有关。检查该函数,因为它可能返回cookie,如果找到,只是退出,如果没有发现任何东西,则返回任何东西,使你未定义。你也可以在交换机上添加“case undefined:”(查看更新后的文章)。 – craniumonempty

回答

1

我同意迈克斯图尔特。你错过了一次休息,所以如果它返回为'',那么它会继续到默认语句。如果在改变之后你仍然得到奇怪的结果,那么问题可能在其他地方。

var loc = ''; 
switch (stateCookie) { 
    case 'Virginia': 
    case null: 
    case '': 
    case undefined: 
     loc = '/Teacher-Login/VA'; 
     break; 
    case 'North Carolina': 
     loc = '/Teacher-Login/NC'; 
     break; 
    case 'South Carolina': 
     loc = '/Teacher-Login/SC'; 
     break; 
    default: 
     loc = '/pages/state-login/login.html'; 
     break; 
}; 
window.location = loc; 

编辑:添加未定义的情况下

+0

非常感谢你! – Darren

0

喜欢的东西:

 
if($.cookie('cookiename') == null) { 
    /// is null 
} 
+0

当我尝试使用我的cookie的名称代码时,得到一个脚本错误:SCRIPT438:对象不支持属性或方法'cookie' – Darren

3

你缺少一休:

   ... 
       case '': 
        window.location = '/Teacher-Login/VA'; 
        break; 
       default: 
        window.location = '/pages/state-login/login.html'; 
        break; 

MDN有项功能:

function hasItem(sKey) { 
    return (new RegExp("(?:^|;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie); 
} 
0

验证您的Cookie它在开关进入之前,像:

stateCookie = (typeof stateCookie != 'string')?'':stateCookie; 

然后开关。

因此,从您的交换机中删除大小写null。

case '': 
    window.location = '/Teacher-Login/VA'; 
+0

如果cookie是一个字符串,你正在清空它。不知道你是否抓住了这一点。 – craniumonempty

+0

谢谢,我犯了一个错误。当不是字符串时,返回一个空字符串,当它返回时,返回字符串。因此,对于空返回或任何其他无效,将成为空字符串。 –

+0

这看起来应该可以工作,但是当我尝试它时,stateCookie的值在执行完此行后仍未定义。 – Darren