出口

2012-02-23 12 views
21

ショート

以下れる私は何をしたい:最初は、機能validate()一つですべての入力1を確認する必要があります:彼らは、空(またはwhitespaced)でないならば、 if文へ移動(ラジオボタンのチェック)しかし、入力の一部が空の場合は、検証関数全体を停止し、空の入力にフォーカスします。ここで出口

が結果です:http://jsfiddle.net/tt13/y53tv/4/

ちょうどokボタンを押すと、あなたはそれがもしあまりにも最初の関数や火災を終えていることがわかります。しかし、私は空のフィールドがある場合には、全体のvalidate()関数を終了したくないだけ

function validate() { 
    $('.var_txt').each(function() { 
     if ($.trim($(this).val()) == '') { 
      $(this).focus(); 
      return false; 
     } 
    }); 

    if (!$(".answer:checked").val()) { 
     alert("boom"); 
     return false; 
    } 
    return true; 
} 
$(document).ready(function() { 
    $("#add_question").submit(function(e) { 
     if (validate()) { 
      alert("good"); 
     } 
     e.preventDefault(); 
    }) 
});​ 

HTMLマークアップ

JS

詳細各()関数から
<form id="add_question" method="post" action=""> 
<table> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="a" /> a) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_a" /> 

        </td> 

        </tr> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="b" /> b) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_b" /> 

        </td> 

        </tr> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="c" /> c) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_c" /> 

        </td> 

        </tr> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="d" /> d) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_d" /> 

        </td> 

        </tr> 

        <tr> 

        <td class="var_label"> 

         <input class="answer" type="radio" name="answer" value="e" /> e) 

        </td> 

        <td> 

         <input type="text" class="var_txt" name="var_e" /> 

        </td> 

        </tr> 

       </table> 
<input type="submit" name="submit" value="ok" /> 

</form> 

答えて

18

続行するには、偽でなければならないフラグを追加します。

function validate() { 
    var invalid = false; 
    $('.var_txt').each(function() { 
     if ($.trim($(this).val()) == '') { 
      $(this).focus(); 
      invalid = true; 
      return false; 
     } 
    }); 
    if (invalid) { 
     return false; 
    } 

    if (!$(".answer:checked").val()) { 
     alert("boom"); 
     return false; 
    } 
    return true; 
} 
$(document).ready(function() { 
    $("#add_question").submit(function(e) { 
     if (validate()) { 
      alert("good"); 
     } 
     e.preventDefault(); 
    }) 

});​ 
4

私たちは、コールバック関数がfalseを返すことによって、特定の反復での$ .each()ループを破ることができます。 non-falseを返すことは、forループのcontinue文と同じです。すぐに次の反復にスキップします。

検証の開始時にフラグを設定します。var broken = false;each内、return false;の直前には、broken = true;を追加します。その後、あなたのeachコードを追加した後if(broken) return false;

1

そうですか?

function validate() { 
    var pass = true; 
    $('.var_txt').each(function() { 
     if ($.trim($(this).val()) == '') { 
      $(this).focus(); 
      pass = false; 
      return false; 
     } 
    }); 

    if (!$(".answer:checked").val()) { 
     alert("boom"); 
     pass = false; 
     return false; 
    } 
    return pass; 
} 

条件が真であるかどうかを確認する変数を追加します。