2009-06-08 6 views
7

J'essaie de comprendre pourquoi ce JavaScript n'arrête pas la soumission du formulaire:forme est toujours soumis, même si la fonction d'auditeur retourne false

<form action="http://www.example.com" id="form"> 
    <input type="text" /> 
    <input type="submit" /> 
</form> 

<script> 
var code = function() { 
    return false; 
}; 
var element = window.document.getElementById("form"); 
if (element.addEventListener) { 
    element.addEventListener("submit", code, false); 
} 
</script> 

À moins ajouter l'attribut onsubmit suivant au formulaire élément:

<form action="http://www.example.com" id="form" onsubmit="return false"> 
    <input type="text" /> 
    <input type="submit" /> 
</form> 

<script> 
var code = function() { 
    return false; 
}; 
var element = window.document.getElementById("form"); 
if (element.addEventListener) { 
    element.addEventListener("submit", code, false); 
} 
</script> 

On dirait que la méthode addEventListener seule devrait faire l'affaire. Des pensées? Je suis sur un Mac et je rencontre le même résultat sur Safari, Firefox et Opera. Merci.

+0

double possible de [return false sur addEventListener soumettre soumet encore la formulaire?] (http://stackoverflow.com/questions/4924036/return-false-on-addeventlistener-submit-still-submits-the-form) – unor

Répondre

8

combine les informations des deux réponses très utiles dans une solution qui fonctionne sur Mac et PC:

<script> 
var code = function (eventObject) { 
    if (eventObject.preventDefault) { 
     eventObject.preventDefault(); 
    } else if (window.event) /* for ie */ { 
     window.event.returnValue = false; 
    } 
    return true; 
}; 
var element = window.document.getElementById("form"); 
if (element.addEventListener) { 
    element.addEventListener("submit", code, false); 
} else if (element.attachEvent) { 
    element.attachEvent("onsubmit", code); 
} 
</script> 
6

On dirait que si vous changez votre fonction

var code = function(e) { 
    e.preventDefault(); 
} 

Il faut faire ce que vous cherchez.

source

2

Je pense que ce que vous cherchez est la méthode preventDefault() de l'interface Event pour les navigateurs qui la mettent en œuvre. Il annulera la soumission du formulaire comme prévu "return false" à.

Plus here et here.

<script type="text/javascript"> 
var code = function (evt) { 
      if (evt.preventDefault) { 
       evt.preventDefault(); 
      } 
      return false; 
}; 
window.onload = function() { 
    var element = window.document.getElementById("form"); 
    if (element.addEventListener) { 
     element.addEventListener("submit", code, false); 
    } 
}; 
</script> 
Questions connexes