2012-01-09 189 views
0

我有以下功能,它會一直返回True。任何想法爲什麼以及如何避免它?謝謝你們。爲什麼下面的javascript函數總是返回true?

function validateStatuses(xyx){ 
var umm = ugh[xyx]; 
var selects = $('#cont_'+ugh.xyz+' .status_select'); 
var codes = $('#cont_'+ugh.xyz+' .status_code'); 
for (var i = 0; i < selects.length; i++) { 
    var value = selects[i].options[selects[i].selectedIndex].value; 
    if (value == 'new'){ 
     for (var j = 0; j < codes.length; j++) { 
      var blagh = codes[j].options[codes[j].selectedIndex].value; 
      if(blagh == 13){ 
       $('#info_dialog').html(''); 
       $('#info_dialog').append("<p>You are trying to process a bill ("+bill.name+") with a STATUS of NEW and a STATUS CODE of NONE. Please correct this issue before you proceed!</p><hr />"); 
       $('#info_dialog').dialog({ 
        buttons:{ 
         Cancel: function(){ 
          $(this).dialog('close'); 
         } 
        } 
        }); 
       billCounterAdd(); 
       return false; 
      }//end if   
     }//end for 
    }else{ 
     return true; //this is the problem; 
    }//end if 
}//end for 
}//end Function 
+1

它返回'true',因爲在某些時候'if(value =='new')'將條件評估爲'false',因此驅動代碼流向'else'分支。 – 2012-01-09 15:14:14

+1

任何時候你必須評論塊的結尾''}「'通常意味着塊太長。 – 2012-01-09 15:14:23

+0

偏離主題,但是由於您似乎正在使用jQuery,因此您可以查看它的['val'](http://api.jquery.com/val/)和['each'](http:// api .jquery.com/val /)函數,這可能有助於簡化代碼。 – 2012-01-09 15:17:50

回答

3

我敢說你至少有一個選擇的值不是'new'。由於您在else子句中執行了return true;,因此第一次選擇的值不是'new'將導致該函數返回true。

看起來它確實有錯誤的返回路徑(如果在開始時有'new'選擇,並且代碼選擇的值爲13),但也許測試用例沒有出現在您的測試中。

爲了弄清楚這樣的事情有什麼問題,沒有什麼比瀏覽代碼並且看着它在一個體面的調試器中逐行運行。所有主流瀏覽器現在(最終)都內置了它們,所以你可以看到到底發生了什麼,並檢查變量等。

+0

+1;敢於離開,好先生。 – 2012-01-09 15:14:46

+0

對好的先生和一個強大的罰款感謝大家的迅速反應。在閱讀你的描述之後,我感到很紅。我移動了最後一個For循環之外的return true語句以獲得所需的效果。 – ringocub 2012-01-09 15:21:34

+0

好的交易,很高興幫助。 – 2012-01-09 15:28:46

相關問題