javascript - js prevent default event




event.preventDefault() und return false(keine jQuery) (2)

Ich fragte mich, ob event.preventDefault() und return false identisch waren.

Ich habe einige Tests gemacht und es scheint so

  • Wenn der Event-Handler beispielsweise mit dem alten Modell hinzugefügt wird

    elem.onclick = function(){
        return false;
    };
    

    Dann gibt return false eine Standardaktion wie event.preventDefault() .

  • Wenn der Event-Handler beispielsweise mit addEventListener hinzugefügt wird

    elem.addEventListener(
        'click',
        function(e){
            return false;
        },
        false
    );
    

    Dann gibt return false die Standardaktion nicht zurück.

Verhalten sich alle Browser so?

Gibt es mehr Unterschiede zwischen event.preventDefault() und return false ?

Wo finde ich einige Dokumentation (ich konnte nicht in MDN) über die return false verhält sich wie event.preventDefault() in einigen Fällen?

Meine Frage bezieht sich nur auf einfaches JavaScript, nicht auf jQuery, also bitte markieren Sie es nicht als Duplikat von event.preventDefault () und return false , auch wenn beide Fragen fast den gleichen Titel haben.


Die W3C Document Object Model Ereignisspezifikation in 1.3.1. Ereignisregistrierungsschnittstellen geben an , dass handleEvent im EventListener keinen Rückgabewert hat:

handleEvent Diese Methode wird immer dann aufgerufen, wenn ein Ereignis des Typs eintritt, für den die EventListener-Schnittstelle registriert wurde. [...] Kein Rückgabewert

unter 1.2.4. Event Cancelation Das Dokument besagt auch, dass

Die Stornierung erfolgt durch Aufruf der preventDefault-Methode des Events. Wenn ein oder mehrere EventListener preventDefault während einer beliebigen Phase des Ereignisablaufs aufrufen, wird die Standardaktion abgebrochen.

event.preventDefault() sollte Sie davon abhalten, einen Effekt zu verwenden, den true / false in jedem Browser haben könnte, und event.preventDefault() .

Aktualisieren

Die HTML5-Spezifikation gibt tatsächlich an, wie ein Rückgabewert anders behandelt wird. Abschnitt 6.1.5.1 der HTML-Spezifikation besagt, dass

Wenn der Rückgabewert ein falscher Boolescher WebIDL-Wert ist, brechen Sie das Ereignis ab.

für alles außer dem "Mouseover" Event.

Fazit

Ich würde immer noch empfehlen, event.preventDefault() in den meisten Projekten zu verwenden, da Sie mit der alten Spezifikation und damit älteren Browsern kompatibel sind. Nur wenn Sie nur topaktuelle Browser unterstützen müssen, ist die Rückkehr von false zum Abbrechen in Ordnung.


Unterschied zwischen preventDefault, stopPropogation und false

Standardaktion - Serverseitige Aktion, wenn das Steuerelementereignis ausgelöst wird.

Angenommen, wir haben eine div-Kontrolle und in ihr haben wir einen Knopf. So div ist die Elternkontrolle des Buttons. Wir haben Client-Klick und Server-Side-Click-Ereignis der Schaltfläche. Wir haben auch click-side click event des div.

Beim click-Ereignis der Schaltfläche auf der Clientseite können wir die Aktionen der übergeordneten Kontrolle und des serverseitigen Codes auf folgende drei Arten steuern:

  • return false - Dies erlaubt nur clientseitige Ereignisse des Controls. Das serverseitige Ereignis und das clientseitige Ereignis des übergeordneten Steuerelements werden nicht ausgelöst.

  • preventDefault() - Dies ermöglicht das clientseitige Ereignis der Kontrolle und seine übergeordnete Kontrolle. Serverseitiges Ereignis, dh. Die Standardaktion des Steuerelements wird nicht ausgelöst.

  • stopPropogation() - Dies ermöglicht clientseitige sowie serverseitige Ereignisse des stopPropogation() . Das clientseitige Ereignis des Controls ist nicht erlaubt.





preventdefault