Frage

Ich habe diesen Testcode für die Frage erstellt: http://jsfiddle.net/5phqm/1/

Soweit ich weiß, wenn JQuery's ist triggerHandler() verhindert das Standard -Browserverhalten, dann werden native JavaScript -Ereignisse nicht ausgelöst und behandelt (und es gilt für addEventListener() in meinem Code), aber Inline -Ereignis, über das Attribut des Tags hinzugefügt onclick="" wird sowieso ausgelöst! Warum passiert es? Verstehe ich etwas über Ereignisse, die im Browser ausgelöst werden?

War es hilfreich?

Lösung

Es kann bestätigt werden, dass Inline -Handler ausgeführt werden, weil es ist explizit codiert:

handle = ontype && cur[ ontype ];
if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
    event.preventDefault();
}

wo ontype ist in diesem Fall "onclick". Also holt es die ab onclick Eigenschaft des Elements und dann ausführen. Dieser Code wird immer genannt, unabhängig davon .trigger/.triggerHandler.

Einheimische Aktionen jedoch wie elem.click(), werden nur ausgeführt Inneren ein if Block:

if ( !onlyHandlers && !event.isDefaultPrevented() ) {
    // ...
    elem[ type ]();

wo onlyHandlers ist true zum triggerHandle und false zum .trigger, und deshalb triggerHandler führt nicht EG aus elem.click() (wohingegen .trigger tut). Daher wird die native Wirkung verhindert.

Inline -Handler und native Handlungen sind also getrennte Dinge und werden auch getrennt behandelt. Nur einheimische Aktionen werden durch verhindert .triggerHandler.

Andere Tipps

Ich denke (aber es ist eine Vermutung, ich habe einen kurzen Blick auf den Quellcode von JQuery gegeben und dies könnte völlig falsch sein), dass JQuery die Ereignisse, die an Elemente in jQuery.trigger.event angeschlossen sind

   $(elem).data("events");

und dann entscheidet, ob sie feuern/stoppt. Inline -Ereignisse können auf diese Weise nicht gesammelt werden und können daher nicht gestoppt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top