web-dev-qa-db-fra.com

onsubmit = "return false" n'a aucun effet sur Internet Explorer 7/8 (le formulaire est toujours soumis)

J'ai un formulaire qui sera soumis par le code javascript déclenché dans "onsubmit" de la balise. Fonctionne bien sur tous les navigateurs - mais pas sur IE7/IE8.

Que puis-je faire?

<form action="/dosomething.htm" method="GET" onsubmit="submitmyform();return false">
  [...]
  <input type="submit" value="Go">
</form>
8
Dirk Paessler

Je vais nitpick ceci. Si vous voulez gérer les soumissions de formulaire, c'est à quoi soumettre. Si l'utilisateur tape dans l'un de vos champs, votre gestionnaire onclick sera totalement évité. Voici un exemple de base de ce faire d'une manière non intrusive.

<form name="myform">
  <input type="submit" />
</form>
<script>
  document.myform.onsubmit = function(){
    alert('handled');
    return false;
  }
</script>

Cela peut être beaucoup plus simple avec jQuery, même formulaire ...

$("form[name=myform]").bind('submit',function(){
   alert('handled');
   return false;
});
11
Drew

Plusieurs idées proposées ici fonctionnent (car elles utilisent différentes manières d’écrire du code correct), mais la réponse est beaucoup plus simple.

OP a écrit:

onsubmit="submitmyform();"

au lieu de :

onsubmit="return submitmyform();"

C'est tout.

6
Thibault Witzig

Je ne pense pas que votre retour faux soit jamais atteint, car il vient après ce qui est revenu de votre fonction.

<form action="/dosomething.htm" method="GET" onsubmit="submitmyform();return false">

Assurez-vous de renvoyer false à l'intérieur de votre fonction 'submitmyform ()', sinon, elle pourrait renvoyer true à votre événement d'obsubmit.

3
Ally

essayez ceci. travaille pour moi.

onSubmit = "javascript: return false"

2
Husnu Setiawan
<script type="text/javascript">
<!--

function submitHandler()
{
  alert(0);
  return false;
}

window.onload=function(){document.getElementById("formid").attachEvent("onsubmit", submitHandler);}
-->
</script>

<form action="/dosomething.htm" method="GET" id="formid">
  [...]
  <input type="submit" value="Go">
</form>

La méthode de l'attachement ne fonctionne que pour IE7/8. Si vous voulez une solution multi-navigateur fiable, vous devez utiliser addEventListener comme alternative.

J'espère que ça aide

2
Sergiu

Pour annuler un événement dans IE hérité, vous devez définir returnValue sur false. Retourner simplement false ne le fera pas. Je ne sais pas pourquoi Microsoft l'a implémenté de cette façon.

function validateForm(evt) {
//  if form is not valid
    if(!condition) {
    //  if evt has preventDefault
        if(evt.preventDefault)
            { event.preventDefault(); }
    //  if evt has returnValue
        else if(evt.returnValue)
            { evt.returnValue = false; }
    //  fallback
        else
            { return false; }
    }
}

//  assume form is reference to your form
form.attachEvent('onsubmit',validateForm);
1
Dissident Rage
<form action="/dosomething.htm" method="GET" onsubmit="return submitmyform(this)">
     [...]
     <input type="submit" value="Go">
   </form>

cela fonctionne bien ... la fonction doit renvoyer true ou false

0
Atiqur

J'ai eu la même erreur et quand j'ai allumé la console, elle n'est jamais arrivée. Donc, j'ai compris, c'était la console, qui n'était pas connue par Internet Explorer tant qu'elle était éteinte. Ajoutez simplement une console factice à la fenêtre avec le code suivant (s'il n'y en a pas déjà un):

var myconsole = {log : function(param){}}
window.console = window.console || myconsole;

Avec cela, vous pourriez avoir des ennuis si vous voulez avoir la console javascript de microsofts. Puis commentez les lignes. Mais maintenant, l'objet console n'est plus indéfini sur tout le site.

0
redestructa

La solution pour nous était de déplacer l'événement javascript de "onsubmit" du formulaire à "onclick" du bouton d'envoi.

<form action="/dosomething.htm" method="GET">
  [...]
  <input type="submit" value="Go" onclick="submitmyform();return false">
</form>
0
Dirk Paessler