2014-08-28 78 views
0

正如你可以從這個代碼中看到:如果在javascript else語句不能正常工作

function setBodyClasses() { 
    var answer = $surveyAns.getAnswer('QUEST223'); 
    answer = 'oro'; 
    if(!surveyUtils.isNullOrWhiteSpace(answer)) { 
     if (answer.toLowerCase().indexOf('oro')) { 
      $scope.bodyClasses = 'vip_gold'; 
     } 
     else if (answer.toLowerCase().indexOf('platino')) { 
      $scope.bodyClasses = 'vip_platinum'; 
     } 
     else { 
      $scope.bodyClasses = ''; 
     } 
    } 
} 

出於某種原因,如果else語句無法正常工作,因爲你可以看到答案值是奧羅和它應該停止在第一個if,但是當它在第一個if條件時比較值,並且假設它不是相同的值,並且由於某種其他原因,即使值不同,它也會進入第二個條件。 任何想法爲什麼發生這種情況?

+7

我們從截圖看不到,添加代碼。 – Mritunjay 2014-08-28 17:22:18

+2

請將您的代碼作爲文本發佈,而不是圖像。 – 2014-08-28 17:23:15

回答

4

您正在錯誤地檢查answer是否包含字符串。 .indexOf()會返回你在字符串中的位置。它可能是0,這是字符串的開始(它就像一個數組,它是零索引的)。如果找不到,則返回-1

如果你只是做if(answer.toLowerCase().indexOf('oro'))它將是false,因爲0是「虛構」。

您想做的事:if(answer.toLowerCase().indexOf('oro') >= 0)

您確定要首先使用indexOf()嗎?這是檢查字符串「是否包含」oro。你確定你不只需要:if(answer.toLowerCase() === 'oro')

+0

我需要檢查字符串是否包含'oro'。謝謝 – Laziale 2014-08-28 17:45:47

2

indexOf正在返回0,並且0是一個虛假值,所以它沒有進入條件。應該是:

.indexOf('oro') > -1 

同樣的,其他條件

1

您正在使用的indexOf找到「奧羅」在字符串中的存在。但是,IndexOf會正確返回值0,這在JavaScript中等於false。我個人會使用answer.indexOf('oro') !== -1