Soumettre le formulaire après l'appel de l'e.preventDefault()

Je fais une simple validation de formulaire ici et est resté coincé sur une question très fondamentale. J'ai 5 paires de champs pour le nom et l'entrée (pour un dîner d'inscription). L'utilisateur peut entrer 1-5 paires, mais un plat doit être sélectionné si un nom est présent. Code:

http://jsfiddle.net/eecTN/1/

<form>
    Name: <input name="atendeename[]">
    Entree: <input name="entree[]"><br>
    Name: <input name="atendeename[]">
    Entree: <input name="entree[]"><br>
    Name: <input name="atendeename[]">
    Entree: <input name="entree[]"><br>
    Name: <input name="atendeename[]">
    Entree: <input name="entree[]"><br>
    Name: <input name="atendeename[]">
    Entree: <input name="entree[]"><br>
    <input type="submit" value="Submit">
</form>
//Prevent form submit if any entrees are missing
$('form').submit(function(e){

    e.preventDefault();

    //Cycle through each Attendee Name
    $('[name="atendeename[]"]', this).each(function(index, el){

        //If there is a value
        if ($(el).val()) {

            //Find adjacent entree input
            var entree = $(el).next('input');

            //If entree is empty, don't submit form
            if ( ! entree.val()) {
                alert('Please select an entree');
                entree.focus();
                return false;
            }
        }
    });

    $('form').unbind('submit').submit();

});

Le message d'erreur est le travail, mais c'est de la soumission du formulaire à chaque fois. Je sais qu'il ya quelque chose de mal avec cette ligne:

$('form').unbind('submit').submit();

...mais je ne suis pas sûr de ce que je dois faire.

  • Pourquoi vous faites unbind pour soumettre votre formulaire ???
  • J'ai vu ce post, mais les solutions look douteux et l'utilisation setTimeout: stackoverflow.com/questions/14866626/...
  • Afin de ne pas exécuter la validation de nouveau. S'il vous plaît, aidez moi que dois - je faire?
  • Mais c' ** doit ** exécuter la validation de tous les temps, n'est-ce pas? Je veux dire, que si l'utilisateur n'a pas à corriger les erreurs et clique sur le bouton de nouveau?
  • Il n'est pas nécessaire de relancer la validation si la validation est déjà passé. Je n'avais juste pas envie de se retrouver dans une boucle infinie (qui est arrivé pendant que j'écrivais plus tôt). Il n'y a probablement pas de bonnes raisons pour unbind.
  • La boucle infinie qui s'est passé parce que votre code a été mal, de sorte que, même si la validation a échoué, la forme essayé de présenter, qui a ensuite entraîné la validation et ainsi de suite. Avec mes modifications, ou l'un des autres posté ici, le formulaire doit être soumis seulement si il n'y a pas d'erreurs.
  • Pourquoi ne pas modifier de sorte que e.preventDefault() n'est appelée que si la validation échoue? Ensuite, vous pouvez supprimer la ligne avec .unbind().submit().
  • Une bonne solution aussi. Probablement le meilleur.
  • Je ne savais pas que je pouvais retarder l'appel de e.preventDefault() dans le script. Cela me semble la bonne solution.
  • Vous cloué, je vais avoir un carnage jour donc, excusez-moi. Merci une tonne, n'hésitez pas à poster réponse pour crédit, voici mon code final: jsfiddle.net/eecTN/6
  • Ok autre est OK, mais également l'idée ici jsfiddle.net/eecTN/9 je vous remercie pour la patience
  • il travail lorsqu'elles sont modifiées à Mootols tous les Soirs thaks dans advancved

InformationsquelleAutor Wesley Murch | 2014-03-12