Ich habe ein Formular, das durch Javascript-Code gesendet wird, der in "onsubmit" des Tags ausgelöst wird. Funktioniert gut mit allen Browsern - aber nicht mit IE7/IE8.
Was kann ich machen?
<form action="/dosomething.htm" method="GET" onsubmit="submitmyform();return false">
[...]
<input type="submit" value="Go">
</form>
Ich werde das picken. Wenn Sie Formulareinreichungen bearbeiten möchten, ist dies für die Übermittlung vorgesehen. Wenn der Benutzer in einem Ihrer Felder die Eingabetaste drückt, wird Ihr Onclick-Handler vollständig vermieden. Hier ist ein grundlegendes Beispiel dafür, dass dies nicht aufdringlich geschieht.
<form name="myform">
<input type="submit" />
</form>
<script>
document.myform.onsubmit = function(){
alert('handled');
return false;
}
</script>
Mit jQuery kann das sehr viel einfacher gemacht werden, gleiches Formular ...
$("form[name=myform]").bind('submit',function(){
alert('handled');
return false;
});
Einige der hier vorgeschlagenen Ideen funktionieren (weil sie unterschiedliche Methoden verwenden, um korrekten Code zu schreiben), aber es gibt eine viel einfachere Antwort
OP schrieb:
onsubmit="submitmyform();"
anstatt :
onsubmit="return submitmyform();"
Das ist es.
Ich glaube nicht, dass Ihre falsche Rückkehr jemals erreicht wird, da sie nach dem zurückkehrt, was von Ihrer Funktion zurückgegeben wurde.
<form action="/dosomething.htm" method="GET" onsubmit="submitmyform();return false">
Stellen Sie sicher, dass Sie false innerhalb Ihrer 'submitmyform ()' - Funktion zurückgeben. Andernfalls kann es zu Ihrem Formular obsubmit event zurückkehren.
versuch das. Arbeit für mich.
onSubmit = "Javascript: False zurückgeben"
<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>
Die Methode zum Anhängen von Ereignissen funktioniert nur für IE7/8. Wenn Sie eine zuverlässige Cross-Browser-Lösung wünschen, sollten Sie alternativ addEventListener verwenden.
Ich hoffe es hilft
Um ein Ereignis im älteren IE abzubrechen, müssen Sie returnValue
auf false
setzen. Einfach false
zurückgeben, wird es nicht tun. Ich weiß nicht, warum Microsoft es auf diese Weise implementiert hat.
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);
<form action="/dosomething.htm" method="GET" onsubmit="return submitmyform(this)">
[...]
<input type="submit" value="Go">
</form>
das funktioniert gut ... die Funktion muss wahr oder falsch zurückgeben
Ich hatte den gleichen Fehler und als ich die Konsole einschaltete, kam es nie. Also habe ich herausgefunden, dass es die Konsole war, die der Internet Explorer nicht kannte, solange sie ausgeschaltet ist. Fügen Sie dem Fenster einfach eine Dummy-Konsole mit dem folgenden Code hinzu (falls noch keiner vorhanden ist):
var myconsole = {log : function(param){}}
window.console = window.console || myconsole;
Mit diesem können Sie in Schwierigkeiten geraten, wenn Sie JavaScript-Konsole von Microsoft haben möchten. Dann kommentieren Sie einfach die Zeilen aus. Jetzt ist das Konsolenobjekt auf der gesamten Site nicht mehr undefiniert.
Die Lösung für uns war, das Javascript-Ereignis von "onsubmit" des Formulars auf "onclick" des Submit-Buttons zu verschieben.
<form action="/dosomething.htm" method="GET">
[...]
<input type="submit" value="Go" onclick="submitmyform();return false">
</form>