2013-02-10 47 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