web-dev-qa-db-fra.com

Sortez non seulement de la fonction enfant, mais de la fonction parent entière

Court

Ce que je veux faire, c'est suivre: Au début, la fonction validate() doit vérifier toutes les entrées une par une: si elles ne sont pas vides (ou blanchies), passez à l'instruction IF (pour vérifier les boutons radio), mais si certains des entrées vides, puis arrêtez toute la fonction de validation et concentrez-vous sur l'entrée vide.

Voici le résultat: http://jsfiddle.net/tt13/y53tv/4/

Il suffit d'appuyer sur ok bouton, vous verrez qu'il finit la première fonction et les incendies si aussi. Mais je veux sortir de la fonction de validate entiers () en cas de champ vide, non seulement de chaque fonction ().

Détaillé

[~ # ~] JS [~ # ~]

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();
    })
});​

Marquage HTML

 <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>
30
Tural Ali

Nous pouvons casser la boucle $ () à une itération particulière en rendant la fonction de rappel renvoyant Faux. Le retour non false est la même chose qu'une déclaration de suite dans A pour boucle; Il saura immédiatement à la prochaine itération.

Définissez un drapeau au début de votre validation: var broken = false;. À l'intérieur du each, juste avant return false;, Ajouter broken = true;. Puis après votre each code ajout if( broken) return false;

4
Niet the Dark Absol

Comme ça?

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;
}

Ajoutez une variable qui vérifie si les conditions sont vraies.

1
Alex