2016-07-01 6 views
1

Welche Parameter werden an einen DOM onclick-Handler übergeben? Wie werden die Parameter aufgelöst/Was ist der Ausführungskontext eines DOM onclick-Handlers?DOM onclick-Handler-Parameter/Ausführungskontext

Sehen Sie diese jsbin (die Browser-Entwickler verwenden Konsole als jsbin ein nicht sehr gut ist) oder dem folgenden Code:

<!-- Remove the id="someid" and see what happpens --> 
<input type="text" id="someid" onclick="clickHandler(this,event,someid)'"/> 

<script> 
    function clickHandler() { 
     console.log(arugments); 
    } 
</script> 

Referenzen

MDN DOM on-event handlers

Weitere Details

I Beachten Sie, dass das Anhängen von Ereignissen im DOM nicht empfohlen wird. Aber diese Technik wird immer noch bei Legacy-Anwendungen verwendet, und ich kann keine Dokumentation finden, die über die Übergabe eines Handlers an diesen Parameter hinausgeht.

+3

Also, was Sie fordern hier? Die Argumente, die im Inline-Event-Handler enthalten sind, sind eindeutig übergeben, und da es sich nur um eine Funktion handelt, können Sie das übergeben, was Sie wollen. Sind Sie nur verwirrt, warum 'someid' auf das Element zeigen würde, wenn ja, weil jedes Element mit einer ID dem globalen' window.someid' als Verweis auf das Element hinzugefügt wird? – adeneo

+0

@adeneo Oh ich wurde verwirrt, es ist der globale Kontext, und ich wusste nicht, dass ein Element mit einer ID zum Fensterobjekt unter dem gleichen ID-Namen hinzugefügt wurde. Können Sie mich auf eine Dokumentation verweisen, die besagt, dass ein Element mit einer ID zum Fensterobjekt hinzugefügt wurde? – ksrb

+0

http://stackoverflow.com/questions/3434278/do-dom-tree-elements-with-ids-become-global-variables – adeneo

Antwort

1

Dies war ein Fall von Verwirrung mich selbst, und denken, dass ein Handler in einem HTML-Attribut gebunden hatte irgendwie einen anderen Ausführungskontext.

Der Handler wird weiterhin im globalen Bereich/Fensterobjekt ausgeführt. Daher verweist das Ereignisobjekt in der Funktion erwartungsgemäß auf das window.event-Objekt und das someid-Objekt auf window.someid.

<input type='text' id='someid' 
onclick=" 
    clickHandler(this, 
       event, //window.event 
       someid)" //window.someid'/> 

Die automatische Erstellung von Fensterobjekt für Elemente mit eindeutigen IDs ist etwas, was ich nicht bewusst, von denen in der Frage des Kommentaren darauf hingewiesen sehen:

Do DOM tree elements with ids become global variables?