Folgendes ist mein JavaScript-Code (mootools):
$('orderNowForm').addEvent('submit', function (event) {
event.preventDefault();
allFilled = false;
$$(".required").each(function (inp) {
if (inp.getValue() != '') {
allFilled = true;
}
});
if (!allFilled) {
$$(".errormsg").setStyle('display', '');
return;
} else {
$$('.defaultText').each(function (input) {
if (input.getValue() == input.getAttribute('title')) {
input.setAttribute('value', '');
}
});
}
this.send({
onSuccess: function () {
$('page_1_table').setStyle('display', 'none');
$('page_2_table').setStyle('display', 'none');
$('page_3_table').setStyle('display', '');
}
});
});
In allen Browsern außer IE funktioniert dies einwandfrei. Im IE verursacht dies jedoch einen Fehler. Ich habe IE8, also habe ich bei der Verwendung des JavaScript-Debuggers festgestellt, dass das event
Objekt keine preventDefault
Methode hat, die den Fehler verursacht, und daher wird das Formular gesendet. Die Methode wird im Fall von Firefox unterstützt (was ich mit Firebug herausgefunden habe).
Irgendeine Hilfe?
Antworten:
im IE können Sie verwenden
um das gleiche Ergebnis zu erzielen.
Und um keinen Fehler zu erhalten, können Sie die Existenz von PreventDefault testen:
Sie können beide kombinieren mit:
quelle
event.preventDefault ? event.preventDefault() : event.returnValue = false;
event.preventDefault();
hat aus irgendeinem Grund aus heiterem Himmel aufgehört, für mich in FireFox zu arbeiten. Ich habe den Code von mority verwendet und es hat großartig funktioniert. Danke ~$('.something').click(function(e){ e.preventDefault ? e.preventDefault() : event.returnValue = false; });
Wenn Sie das Ereignis über die addEvent-Funktion von mootools binden, erhält Ihr Ereignishandler ein festes (erweitertes) Ereignis, das als Parameter übergeben wird. Es wird immer die PreventDefault () -Methode enthalten.
Probieren Sie diese Geige aus, um den Unterschied in der Ereignisbindung festzustellen. http://jsfiddle.net/pFqrY/8/
Für alle jQuery- Benutzer können Sie bei Bedarf ein Ereignis beheben. Angenommen, Sie haben HTML onclick = ".." verwendet und erhalten ein IE-spezifisches Ereignis, dem PreventDefault () fehlt. Verwenden Sie einfach diesen Code, um es abzurufen.
Danach e.preventDefault (); funktioniert gut.
quelle
Ich weiß, dass dies ein ziemlich alter Beitrag ist, aber ich habe nur einige Zeit damit verbracht, diese Arbeit in IE8 zu machen.
Es scheint, dass es einige Unterschiede in den IE8-Versionen gibt, da die hier und in anderen Threads veröffentlichten Lösungen bei mir nicht funktionierten.
Nehmen wir an, wir haben diesen Code:
In meinem IE8
preventDefault()
existiert die Methode wegen jQuery, funktioniert aber nicht (wahrscheinlich wegen des folgenden Punktes), so dass dies fehlschlägt.Auch wenn ich die
returnValue
Eigenschaft direkt auf false setze :Dies funktioniert auch nicht, da ich nur eine Eigenschaft des benutzerdefinierten jQuery-Ereignisobjekts festgelegt habe.
Die einzige Lösung, die für mich funktioniert, besteht darin, die Eigenschaft
returnValue
einer globalen Variablenevent
wie folgt festzulegen :Nur um es jemandem zu erleichtern, der versucht, IE8 zur Arbeit zu überreden. Ich hoffe, dass IE8 bald schrecklich im schmerzhaften Tod sterben wird.
AKTUALISIEREN:
Wie sv_in hervorhebt , können Sie das
event.originalEvent
ursprüngliche Ereignisobjekt abrufen und diereturnValue
Eigenschaft im ursprünglichen Objekt festlegen . Aber ich habe es noch nicht in meinem IE8 getestet.quelle
event.originalEvent
. Weitere InformationenMootools definiert PreventDefault in Ereignisobjekten neu. Ihr Code sollte also in jedem Browser einwandfrei funktionieren. Wenn dies nicht der Fall ist, gibt es ein Problem mit der Unterstützung von ie8 in mootools.
Haben Sie Ihren Code auf ie6 und / oder ie7 getestet?
Der Arzt sagt
Falls dies nicht der Fall ist, möchten Sie es vielleicht versuchen
quelle
Getestet auf IE 9 und Chrome.
quelle
Verwenden Sie zum Deaktivieren einer Tastaturtaste nach IE9:
e.preventDefault();
Verwenden Sie: oder, um eine normale Tastaturtaste unter IE7 / 8 zu deaktivieren
e.returnValue = false;
return false;
Wenn Sie versuchen, eine Tastenkombination zu deaktivieren (z. B. mit Strg
Ctrl+F
), müssen Sie folgende Zeilen hinzufügen:Hier ist ein vollständiges Beispiel nur für IE7 / 8:
Referenz: So deaktivieren Sie Tastaturkürzel in IE7 / IE8
quelle
Hier ist eine Funktion, die ich mit dem nächtlichen Build von jquery 1.3.2 und dem 18.09.2009 getestet habe. Lassen Sie mich Ihre Ergebnisse damit wissen. In Safari, FF, Opera unter OSX läuft alles gut. Es dient ausschließlich zur Behebung eines problematischen IE8-Fehlers und kann zu unbeabsichtigten Ergebnissen führen:
Verwendung:
quelle
stop
Methode noch nie gesehen und konnte sie in msdn nicht finden. Was tut es?.stop()
löst eine Ausnahme aus, da sie nicht existiert. Jede Ausnahme hat den gewünschten Effekt.e.preventDefault()
auslösen möchten, können Sie einfach anrufen, weil es sowieso eine Ausnahme auslösen würde ...preventDefault
ist ein weit verbreiteter Standard; Die Verwendung eines Ad-hoc-Systems jedes Mal, wenn Sie mit alten IE-Versionen kompatibel sein möchten, ist umständlich. Verwenden Sie besser eine Polyfüllung:Dadurch wird der Prototyp des Ereignisses geändert und diese Funktion hinzugefügt, eine großartige Funktion von Javascript / DOM im Allgemeinen. Jetzt können Sie
e.preventDefault
ohne Probleme verwenden.quelle
return false
in Ihrem Listener sollte in allen Browsern funktionieren.quelle
FWIW, falls jemand diese Frage später erneut beantwortet, können Sie auch überprüfen, was Sie an Ihre onKeyPress-Handlerfunktion übergeben.
Ich bin auf diesen Fehler gestoßen, als ich versehentlich onKeyPress (this) anstelle von onKeyPress (event) übergeben habe.
Nur noch etwas zu überprüfen.
quelle
Mir half eine Methode mit einer Funktionsprüfung. Diese Methode funktioniert in IE8
quelle