event.preventDefault () - Funktion funktioniert im IE nicht

Folgendes ist mein JavaScript (mootools) Code:

$('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 herausgefunden, dass dasevent Objekt hat keinepreventDefault Methode, die den Fehler verursacht und daher das Formular gesendet wird. Die Methode wird im Falle von Firefox unterstützt (was ich mit Firebug herausgefunden habe).

Irgendeine Hilfe?

 Alsciende16. Juni 2009, 12:17
Mein schlechtes, ich habe meinen Kommentar gelöscht, der lautete "Hat Mootools keine Methode, um Ereignisse zu stoppen?". Es gibt also ein Problem mit Mootools auf IE8 ...
 eerne24. Mai 2011, 12:04
Kann dieses Problem nicht reproduzieren.Diese Geige "funktioniert bei mir mit zB 8" Könnten Sie eine reduzierte Geige einrichten, um den Fehler anzuzeigen?jsfiddle.net
 Paolo Bergantino16. Juni 2009, 12:15
Es tut; nach den docs (mootools.net/docs/core/Native/Event#Event:preventDefault) was er hat sollte funktionieren: "Ereignismethode: preventDefault - Browserübergreifende Methode, um die Standardaktion des Ereignisses zu verhindern."

Antworten auf die Frage(11)

if (e.preventDefault) {
    e.preventDefault();
} else {
    e.returnValue = false;
}

 GreySage12. Sept. 2018, 20:16
Funktioniert nicht in IE 11 (e.preventDefault ist eine Funktion, obwohl sie anscheinend nichts bewirkt)

FWIW, falls jemand diese Frage später noch einmal 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.

return false in Ihrem Listener sollte in allen Browsern funktionieren.

$('orderNowForm').    // your code
    return false;
}

preventDefault ist ein weit verbreiteter Standard; Es ist umständlich, jedes Mal ein Adhoc zu verwenden, wenn Sie mit alten IE-Versionen kompatibel sein möchten. Besser ist die Verwendung einer Polyfill:

undefined') {
    Event.prototype.preventDefault = function (e, callback) {
        this.returnValue = false;
    };
}

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 verwendene.preventDefault ohne problem.

die ich mit dem nächtlichen Build von jquery 1.3.2 und 09-18-2009 getestet habe. Lass mich deine Ergebnisse damit wissen. In Safari, FF und Opera unter OSX läuft diesbezüglich alles einwandfrei. Es dient ausschließlich zur Behebung eines problematischen IE8-Fehlers und kann zu unbeabsichtigten Ergebnissen führen:

function ie8SafePreventEvent(e) {
    if (e.preventDefault) {
        e.preventDefault()
    } else {
        e.stop()
    };

    e.returnValue = false;
    e.stopPropagation();
}

Verwendungszweck:

$('a').click(function (e) {
    // Execute code here
    ie8SafePreventEvent(e);
    return false;
})
 Jay Bazuzi30. Juni 2014, 17:35
.stop() Löst eine Ausnahme aus, da sie nicht existiert. Jede Ausnahme hat den gewünschten Effekt.
 Oriol23. Sept. 2013, 20:27
Ich habe das noch nie gesehenstop Methode vor, und ich konnte es nicht in msdn finden. Was tut es?

nktioniert in IE8

if(typeof e.preventDefault == 'function'){
  e.preventDefault();
} else {
  e.returnValue = false;
}

llte also in jedem Browser einwandfrei funktionieren. Wenn dies nicht der Fall ist, liegt ein Problem mit der Unterstützung von IE8 in Mootools vor.

Haben Sie Ihren Code auf ie6 und / oder ie7 getestet?

Der Doktor sagt

Jedes mit addEvent hinzugefügte Ereignis ruft die Methode mootools automatisch ab, ohne dass es manuell instanziiert werden muss.

Falls dies nicht der Fall ist, möchten Sie es vielleicht versuchen

new Event(event).preventDefault();
 sv_in16. Juni 2009, 12:34
Es gab ein Problem, wenn man so auch in IE einwickelte. Ach du lieber Gott! Warum IE?
 Alsciende30. Juni 2009, 15:39
Sie möchte das Ereignis jedoch nicht stoppen, sondern nur seine Standardaktion verhindern.
 Dimitar Christoff26. Juni 2009, 18:14
neues Ereignis (e) .stop (); Funktioniert ab IE6

wird Ihrem Ereignishandler ein festes (erweitertes) Ereignis als Parameter übergeben. Es wird immer die preventDefault () -Methode enthalten.

Probieren Sie diese Geige aus, um den Unterschied in der Ereignisbindung zu sehen.http://jsfiddle.net/pFqrY/8/

// preventDefault always works
$("mootoolsbutton").addEvent('click', function(event) {
 alert(typeof(event.preventDefault));
});

// preventDefault missing in IE
<button
  id="htmlbutton"
  onclick="alert(typeof(event.preventDefault));">
  button</button>

Für allejQuery Benutzer da draußen können bei Bedarf ein Ereignis reparieren. Angenommen, Sie haben HTML onclick = ".." verwendet und ein IE-spezifisches Ereignis erhalten, das preventDefault () fehlt. Verwenden Sie einfach diesen Code, um es abzurufen.

e = $.event.fix(e);

Nach diesem e.preventDefault (); funktioniert gut.

 Evildonald26. Nov. 2012, 20:55
+1 für den tollen jQuery Fix :)
 Beatles169229. Mai 2015, 17:27
Leider funktioniert dieser Trick bei mir nicht. Ich verwende IE 10 und bevor ich e.preventDefault () aufrufe; Ich rufe $ .event.fix (e) auf. ohne Erfolg :(
 oldwizard02. Dez. 2015, 10:43
Haben Sie das feste Ereignis erneut der Variablen e zugewiesen?
 oldwizard29. Mai 2015, 17:43
Es könnte aus jquery 2 entfernt worden sein? Aber IE10 benötigt das Update nicht.

e.preventDefault();

So deaktivieren Sie anormale Tastaturtaste Verwenden Sie unter IE7 / 8:e.returnValue = false; oderreturn false;

Wenn Sie versuchen, a zu deaktivierenTastaturkürzel (mit Strg, wieCtrl+F) Sie müssen diese Zeilen hinzufügen:

try {
    e.keyCode = 0;
}catch (e) {}

Hier ist ein vollständiges Beispiel nur für IE7 / 8:

document.attachEvent("onkeydown", function () {
    var e = window.event;

    //Ctrl+F or F3
    if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
        //Prevent for Ctrl+...
        try {
            e.keyCode = 0;
        }catch (e) {}

        //prevent default (could also use e.returnValue = false;)
        return false;
    }
});

Referenz :So deaktivieren Sie Tastaturkürzel in IE7 / IE8

dass dies ein ziemlich alter Beitrag ist, aber ich habe nur einige Zeit damit verbracht, diese Funktion in IE8 auszuführen.

Es scheint, dass es einige Unterschiede in den IE8-Versionen gibt, da die hier und in anderen Threads veröffentlichten Lösungen für mich nicht funktionierten.

Nehmen wir an, wir haben diesen Code:

$('a').on('click', function(event) {
    event.preventDefault ? event.preventDefault() : event.returnValue = false;
});

In meinem IE8preventDefault() Die Methode existiert aufgrund von jQuery, funktioniert aber nicht (wahrscheinlich aufgrund des folgenden Punkts), sodass dies fehlschlägt.

Auch wenn ich gesetzt habereturnValue Eigenschaft direkt auf false:

$('a').on('click', function(event) {
    event.returnValue = false;
    event.preventDefault();
});

Dies wird auch nicht funktionieren, da ich nur eine Eigenschaft des benutzerdefinierten jQuery-Ereignisobjekts festgelegt habe.

Die einzige Lösung, die für mich funktioniert, ist das Festlegen von EigenschaftenreturnValue vonGlobale Variable event so was:

$('a').on('click', function(event) {
    if (window.event) {
        window.event.returnValue = false;
    }
    event.preventDefault();
});

Nur um es jemandem leichter zu machen, der versucht, den IE8 von der Arbeit zu überzeugen. Ich hoffe, dass IE8 bald schrecklich im schmerzhaften Tod sterben wird.

AKTUALISIEREN:

Wiesv_in weist darauf hin, dass Sie verwenden könntenevent.originalEvent um das ursprüngliche Ereignisobjekt zu erhalten und festzulegenreturnValue Eigentum in der ursprünglichen. Aber ich habe es noch nicht in meinem IE8 getestet.

 muffir21. Jan. 2014, 11:21
Danke für die Information. Ich werde meinen Beitrag aktualisieren.
 sv_in29. Dez. 2013, 15:11
Sie können auch das ursprüngliche Browserereignisobjekt von abrufenevent.originalEvent. Mehr Info:stackoverflow.com/a/16675056/22550
Lösung für das Problem

im IE können Sie verwenden

event.returnValue = false;

um das gleiche Ergebnis zu erzielen.

Und um keinen Fehler zu bekommen, können Sie das Vorhandensein von preventDefault testen:

if(event.preventDefault) event.preventDefault();

Sie können beides kombinieren mit:

event.preventDefault ? event.preventDefault() : (event.returnValue = false);
 sv_in16. Juni 2009, 12:32
Der folgende Code hat bei mir funktioniert: if (event.preventDefault) {event.preventDefault (); } else {event.returnValue = false; }
 Edoardo Panfili10. Aug. 2013, 21:23
Vielen Dank! Ich habe diese Lösung in einem Maus-Down-Handler verwendet und in meinem System mit IE8 muss ich "ondragstart" einen Handler hinzufügen, der false zurückgibt.
 Ziggler23. Dez. 2017, 01:35
Es hat bei mir funktioniert. Ich habe an einer Angular 4-Anwendung gearbeitet und in Typescript muss ich switch (event.keyCode.toString ()) verwenden, um zu überprüfen, welchen Key-User ausgewählt hat ...
 mortiy06. März 2011, 14:43
event.preventDefault ? event.preventDefault() : event.returnValue = false;
 Kevin Kuszyk12. März 2014, 11:26
Ist diese Problemumgehung wirklich erforderlich? Es sieht so aus, als hätte jQuery seit v1.3 richtig funktioniert. Siehe dieQuelle undSchuld.
 James05. Apr. 2012, 20:29
event.preventDefault(); Ich habe aus irgendeinem Grund aus heiterem Himmel aufgehört, für mich in FireFox zu arbeiten. Benutzt den Moralcode und es hat super funktioniert. Vielen Dank ~
 Luke18. Dez. 2014, 11:01
Nur um den Kommentar von @ jmort253 klarer zu machen:$('.something').click(function(e){ e.preventDefault ? e.preventDefault() : event.returnValue = false; });
 oldwizard21. Nov. 2012, 15:27
Wenn das Ereignis von einem mit mootools addEvent () gebundenen Ereignishandler stammt, hat der an Ihren Handler übergebene Ereignisparameter immer preventDefault (). Wenn Sie IE-spezifischen AddEventListener oder HTML-onclick = "" verwenden, erhalten Sie diese Hilfe nicht von mootools.
 jmort25305. Apr. 2012, 19:16
Es ist erwähnenswert, dass "event" das globale Ereignisobjekt in IE8 sein muss. Sie können das in den Ereignishandler übergebene Ereignis nicht verwenden, wie z. B. e.preventDefaultMuss Seien Sie event.preventDefault, damit dies in IE8 funktioniert.

Ihre Antwort auf die Frage