2010-06-30 2 views
2

Je construis un site qui utilise le plugin de validation de jQuery et souhaite que les choses soient validées avant de soumettre le formulaire. Mon code ressemble suitLe fait de taper enter dans n'importe quelle zone de texte en chrome déclenche le formulaire submit, même s'il n'y a pas de bouton submit

<form> 
    <input type="button" value="Submit the Form" onclick="validateAndSubmit()" /> 
</form> 
<script language="javascript"> 

    function validateAndSubmit(){ 
    //do some validation and then submit 
} 

</script> 

Dans Firefox, cela fonctionne parfaitement. Dans Chrome, lorsque j'appuie sur Entrée, n'importe où dans la page, le formulaire de soumission est déclenché et la validation ne fonctionne pas non plus. Y at-il quelque chose à éviter? Le navigateur ne doit-il pas soumettre un formulaire lorsque nous tapons une entrée s'il n'y a pas de bouton de soumission?

Répondre

3

utiliser cette syntaxe:

<form onsubmit="return validateAndSubmit()"> 
... 

si vous avez besoin pour attraper le retour clé peut-être vous pouvez le manipuler en liant une événement keydown à l'entrée et effectuer une action sur codeTouche # 13

1

Je ne suis pas sûr s'il y a une norme à ce sujet ou non. Quoiqu'il en soit, vous pouvez vous épargner le problème en adoptant simplement une stratégie plus forte: implémentez la validation en tant qu'action onsubmit sur le formulaire, plutôt qu'une action onclick pour le bouton. Je n'utilise presque jamais de boutons dans les formulaires; avoir à le faire pour le vôtre ne ferait que me décourager, et ce n'est pas bon pour les utilisateurs.

Donc de toute façon. Le formulaire onsubmit est le chemin à parcourir. Et je vous en serais reconnaissant si vous avez utilisé Javascript discret au lieu des attributs HTML :)

+1

vous les utilisateurs ne vont pas apprécier votre page comportement en ajoutant après avoir chargé s'ils ont déjà soumis le formulaire avant le chargement de la page et a manqué la fonctionnalité JavaScript utile. –

+0

@Tim Down - Je sais que c'est un point de sémantique, mais la seule raison pour laquelle ils ne l'apprécieront pas, c'est parce qu'ils ne le sauront jamais. Cependant, il semble que vous utilisiez 'window.onload' à la place des fonctions DOMReady, ce qui est la vraie source du problème de devoir attendre le chargement de la page. (C'est-à-dire, à moins que la connexion de l'utilisateur soit si lente qu'elle ne puisse même pas télécharger le script avant de remplir un formulaire complet, auquel cas l'intégration directe du Javascript aggravera le problème.) – Matchu

+0

I utilisez 'DOMContentLoaded' si disponible. Je n'insiste pas sur l'idée que l'utilisation d'attributs de gestionnaires d'événements est toujours pire qu'attribuer des gestionnaires d'événements une fois le document chargé. –

2

Essayez cette méthode:

<form onsubmit="return validateAndSubmit(this);"> 
    <input type="submit" value="Submit the Form"/> 
</form> 
<script language="javascript"> 

    function validateAndSubmit(form_obj){ 
    if(some_variable == 'correct_value') { 
     form_obj.submit(); 
     return true; 
    } else { 
     alert('Wrong value'); 
     return false; 
    } 
    //do some validation and then submit 
} 

</script> 
+0

Que devrait renvoyer la fonction validateAndSubmit()? Une valeur booléenne? Comment arrêter la validation si nécessaire? –

+0

J'ai mis à jour le code. J'espère que c'est clair maintenant. – antyrat

Questions connexes