2012-01-09 7 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

ある時点で 'if(value == 'new')'条件が 'false'と評価され、' else'ブランチへのコードフローが発生します。 –

+1

ブロックの ''} ''をコメントする必要があるときはいつも、ブロックが長すぎることを意味します。 –

+0

オフトピックですが、jQueryを使用しているようですが、['val'](http://api.jquery.com/val/)と[' each'](http:// api .jquery.com/val /)関数を使用すると、コードを簡素化するのに役立ちます。 –

答えて

3

私はあえて少なくとも1つの選択肢が'new'ではないと言っています。 else句にreturn true;を実行したため、最初に選択した値が'new'ではない場合、関数はtrueを返します。

最初に'new'が選択されていて、値が13のコードが選択されていますが、そのテストケースがテストに反映されていない可能性があります。

このようなことに何が問題なのかを把握する上で、まともなデバッガではコードを歩き回って行単位で実行するのは珍しいことではありません。すべての主要なブラウザには、現在(最終的に)組み込まれているので、何が起きているのかを正確に確認して変数などを調べることができます。

+0

+1;あえて、良い先生。 –

+0

正直なところにありがとうございました。迅速な対応のために皆に感謝します。私はあなたの説明を読んだ後、むしろ赤い顔をしていました。私は、最後のForループの外側でreturn trueステートメントを移動して、目的の効果を得ました。 – ringocub

+0

よかったです。喜んで助けました。 –

関連する問題