2012-09-05 5 views
0

J'essaye d'empêcher l'envoi d'un formulaire avec le script suivant, mais c'est toujours le cas. J'ai même essayé preventDefault() sur le chargement de document, mais cela ne fonctionne pas.Le formulaire de soumission de formulaire jQuery ne fonctionne pas

$("form").submit(function() { 
     if ($("input").eq(3).val() == $("input").eq(4).val()) { 
      $("span").text("Validated...").show(); 
     return true; 
     } 

     $("span").text("Passwords do not match!").show().fadeOut(1000); 
     return false; 
}); 
+0

'return true' entraînera la soumission du formulaire. Votre code semble bien. –

+0

@KevinB Je sais bien? Mais ça ne marche pas! Peut-être que quelque chose ne va pas avec mon serveur/navigateur (Chrome). – MayTheSchwartzBeWithYou

+0

Pour le débogage, renvoyer false dans les deux cas et alert ou console.log à chacun pour savoir lequel a été atteint. Il est plus que probable que votre instruction if conditionnelle ne sélectionne pas les éléments d'entrée corrects. –

Répondre

0

Pour cela fermer I pense que j'ai trouvé quelque chose, mais c'est au mieux absurde. Mes fonctions fonctionnent lorsqu'elles sont dans un $ (document) .ready. Pourquoi? Je serais heureux d'écouter vos conseils.

$(document).ready(function(){ 

$("form").submit(function() { 
     if ($("input").eq(3).val() == $("input").eq(4).val()) { 
      $("span").text("Validated...").show(); 
     return true; 
     } 

     $("span").text("Passwords do not match!").show().fadeOut(1000); 
     return false; 
}); 

}); 
1
$("form").submit(function(e) { 
     if ($("input").eq(3).val() == $("input").eq(4).val()) { 
      $("span").text("Validated...").show(); 
     } 
     else{ 
     $("span").text("Passwords do not match!").show().fadeOut(1000); 
     e.preventDefault(); 
     } 
}); 

Vous devez utiliser preventDefault() pour annuler l'action. Notez le paramètre e que j'ai ajouté à l'appel de fonction anonyme.

+0

Il soumet toujours. Choses étranges ... Aussi pouvez-vous élaborer ce que le «e» signifie? – MayTheSchwartzBeWithYou

+0

renvoie 'false' à partir d'un gestionnaire d'événement jQuery déjà fait' preventDefault() 'pour vous. Cela ne modifie pas le comportement de soumission du code OP. – jfriend00

+1

@Peter Votre logique de validation doit alors être vraie, donc elle n'atteindra jamais la ligne 'preventDefault()'. 'e' est juste un raccourci pour' event'. Vous pouvez le nommer comme vous voulez, mais c'est l'objet événement qui contient un certain nombre de propriétés liées à l'événement. – Shmiddty

0

Ma suggestion, ou la façon dont je vais normalement à ce sujet est comme ceci:

$("form").submit(function(e) { 
    e.preventDefault(); // form never fires unless I want it to 

    if(condition == true) { 
     $(this).submit(); 
    } else { 
     //Don't submit 
    } 
} 

Here est une bonne explication des raisons pour lesquelles preventDefault()> return false

Questions connexes