2013-02-10 58 views
0

A)我有工作得非常好第一功能:“IF ELSE” 的Javascript工作不

if(onlyUs == '1' && idUser == '0'){ 
      obj.after(jQuery('<div />').css({'clear':'both'}).addClass('kklike-msg').text('Only registered users can vote.')); 
      setTimeout(function(){ 
       jQuery('.kklike-msg').fadeOut('normal'); 
      },3000); 
      return false; 
     } 

B)所以我想我可以做以下的事情:

 if(idUser == '0'){ 
       if(action == 'like'){ 
         var ajaxAction = 'add_like'; 
       }else{ 
         var ajaxAction = 'remove_like'; 
       } 
     }else{ 
      if(action == 'like'){ 
         var ajaxAction = 'add_like'; 
         window.open('http://mywebsite.com/like') 
       }else{ 
         var ajaxAction = 'remove_like'; 
         window.open('http://mywebsite.com/remove') 
       } 
     } 

C)知道原来功能简单(效果很好):

if(action == 'like'){ 
         var ajaxAction = 'add_like'; 
       }else{ 
         var ajaxAction = 'remove_like'; 
       } 

但是B)不工作。在这两种情况下(登录与否),新窗口将打开。 你有解决方案吗?

+0

登录与否,'idUser'是从来没有''0'',所以执行将总是直接进入'else'块。 – Teemu 2013-02-10 16:10:28

+1

这段代码没有做任何事情:if(action =='like'){var ajaxAction ='add_like'; } else {var ajaxAction ='remove_like'; }只要你离开if,声明的变量就会消失 – 2013-02-10 16:49:15

回答

4

如果不知道idUser,这是很难说是什么问题,但最有可能的罪魁祸首是the use of == for comparison instead of ===。在使用==时,JavaScript会将要比较的变量转换为类似的类型,这会在您的案例中导致一些非常不可预测的结果。

我建议像下面这样编写代码。如果这仍然不能如预期的那样工作,您应该调查idUser的实际价值。它可能不是string这可能是您的问题的原因。

if (idUser === '0') { 
    if(action === 'like') { 
     var ajaxAction = 'add_like'; 
    } else { 
     var ajaxAction = 'remove_like'; 
    } 
} else { 
    if (action === 'like') { 
     var ajaxAction = 'add_like'; 
     window.open('http://mywebsite.com/like'); 
    } else { 
     var ajaxAction = 'remove_like'; 
     window.open('http://mywebsite.com/remove'); 
    } 
} 

对于为什么要使用===一个非常简单的例子,看到这篇博客文章:

http://longgoldenears.blogspot.com/2007/09/triple-equals-in-javascript.html

+0

@Teemu,这就是为什么在这种情况下知道'idUser'的值是多么的重要。在该块将值设置为“1”,“1”,“true”等之前,可能会有代码执行。如果没有“idUser”的值,则此代码失败的原因尚不清楚。 – 2013-02-10 16:43:53