web-dev-qa-db-fra.com

onSubmit renvoyant false ne fonctionne pas

Je suis complètement confus ... je jurerais que cela fonctionnait hier ... Je me suis réveillé ce matin et tous mes formulaires se sont arrêtés pour fonctionner dans mon projet.

Tous les formulaires ont un "onsubmit" à une fonction qui retourne false puisqu'il s'agit d'un appel ajax, le formulaire n'est donc jamais envoyé.

Après de nombreux tests, j'ai simplifié la question à ce morceau de code:

<html>
<head>
<script type="text/javascript">
 function sub()
 {
  alert ("MIC!");
  return false;
 }
</script> 
</head>
<body>

<form method = "post" id = "form1" onsubmit = "return sub()">
 input: <input type="text" name="input1" >
    <a href="#" onClick="document.getElementById('form1').submit();">button</a> 
</form>

</body>
</html>

Je jurerais que cela fonctionne parfaitement, mais aujourd'hui ne fonctionne pas: D

Pourquoi si j'appuie sur le bouton le formulaire est envoyé?

Je sais que c'est une question de débutant totale, mais je suis coincé

Je vous remercie !

12
StuckOnSubmit

Navigateurs ne pas appeler l'événement onSubmit du formulaire si vous appelez submit () par programme.

12
Andy Shellam

L'événement onsubmit ne se déclenche que pour les soumissions sous forme normale. Il ne se déclenche pas lorsque la méthode JavaScript submit() est appelée.

La meilleure solution consiste à utiliser un bouton de soumission normal ici.

Si vous souhaitez continuer à utiliser un lien vers le haut de la page (qui n'est pas non dissimulé , progressif ou gracieux), vous devez appeler la fonction sub() explicitement et tester sa valeur de retour avant décider si vous devez appeler submit() ou non.

5
Quentin

Il semble que la fonction 'submit ()' contourne l'événement 'on'submit' de la forme 'tags' dans Firefox et IE8. Si vous utilisez un bouton d'envoi, cela fonctionnera comme prévu:

<html>
<head>
<script type="text/javascript">
 function sub()
 {
  alert ("MIC!");
  return false;
 }
</script> 
</head>
<body>

<form method = "post" action="http://google.com" id = "form1" onsubmit = "return sub();">
 input: <input type="text" name="input1" >
     <input type="submit">
</form>

</body>
</html>
5
user299600

Vous pouvez utiliser la méthode jquery preventDefault.

$(function () {
        $('#repForm').bind('submit', function (e) {
            var isValid = true;
            if (btnname == 'test') {
                isValid = ValidateEmailID();
            }
            else {
                isValid = ValidateSomething();
            }

            if (!isValid) {
                e.preventDefault();
            }
        });
    });
4
Antony Blazer

Essayez de vous changer le code "bouton" comme ça

<a href="#" onClick="return document.getElementById('form1').onsubmit();">button</a> 
2
Olegas

Je soupçonne qu'il voulait utiliser un bouton de formulaire qui n'était pas du type submit. Dans ce cas, vous pouvez également utiliser:

 <input type="button" value="Submit" onclick="if( sub()) document.getElementById('form1').submit()">

Un autre conseil que je donne est d'utiliser l'attribut name dans toutes les formes, car il est beaucoup plus facile à utiliser: document.form1.submit() au lieu de document.getElementById('form1').submit(). C'est crossbrowser et travail dans chacun d'eux. getElementById est génial mais pas nécessaire pour les formulaires.

0
Sergio Abreu
<head>
  <script type="text/javascript">
   function sub(e)
   {
     e.preventDefault();
     alert ("MIC!");
     return false;
   }
  </script> 
 </head>
 <body>
   <form method = "post" id = "form1" onsubmit = "return sub(event);">
   </form>
0
YakovGdl35

J'ai le même problème (j'utilisais IE 8),

le code suivant ne fonctionne PAS:

<form method="post" id="form1" onsubmit="sub">
<form method="post" id="form1" onsubmit="sub()">
<form method="post" id="form1" onsubmit="return sub()">

et le code suivant est WORKING,

<form method="post" id="form1" onsubmit="return(sub())">

Je viens de suivre l'exemple ici

Et s'il vous plaît noter que:

La méthode submit n'invoque pas le gestionnaire d'événements onsubmit.

Soumettez un formulaire en utilisant INPUT TYPE = submit, INPUT TYPE = image ou BUTTON TYPE = submit object.

0
Laksmono

Ajoutez "return" dans toutes vos instructions onsubmit dans votre balise de formulaire ... par exemple. onsubmit = "return validate_function ()" de cette manière, le retour false ou return true dans votre fonction validate est envoyé en tant que résultat à la commande return de votre onsubmit.

0
Firsake