2013-05-06 6 views
31
<p id="p" onclick="doSomething(e)"> 
    <a href="#">foo</a> 
    <span>bar</span> 
</p> 

Es wurden einige ähnliche Fragen gestellt.Wie Übergeben Sie Ereignis als Argument an einen Inline-Ereignishandler in JavaScript?

Aber in meinem Code, Ich versuche Kind-Elemente zu erhalten, die, wie a oder span geklickt wurde.

Also, was ist der richtige Weg, um event als Argument zu Event-Handler zu übergeben, oder wie man Ereignis innerhalb Handler erhalten, ohne ein Argument übergeben?

bearbeiten

Ich bin mir dessen bewusst addEventListener und jQuery, geben Sie bitte eine Lösung Veranstaltung inline Ereignis hander für das Bestehen.

+0

https://developer.mozilla.org/en/docs/DOM/EventTarget.addEventListener –

+4

Gibt es einen guten Grund für die Verwendung von Inline-Event-Handlern, anstatt zu addEventListener zu wechseln? http://en.wikipedia.org/wiki/Unobtrusive_JavaScript – Xotic750

Antwort

58

das event Objekt zu übergeben:

function doSomething(e) { 
    e = e || window.event; 
    var target = e.target || e.srcElement; 
    console.log(target); 
} 

passieren das Element selbst (DOMElement):

<p id="p" onclick="doSomething(event);"> 

das geklickt Kind-Element zu erhalten (sollte mit event Parameter verwendet werden

<p id="p" onclick="doThing(this);"> 

siehe Live-Beispiel auf jsFiddle

+5

(Und für alle die sich fragen: Ja, das funktioniert bei Chrome, Firefox, etc., obwohl einige [Firefox, zum Beispiel] kein globales 'Ereignis haben "Objekt. Es ist, weil der Kontext, in dem der DOM0-Handler aufgerufen wird, ein' Ereignis'-Objekt hat, selbst wenn [in einigen Browsern] es nicht global ist. " –

+0

" this "bezieht sich auf' p', aber ich bin versuchen, "a" oder "span" zu erhalten – user1643156

+0

@ user1643156 ich habe die Antwort aktualisiert –

3

Da Inline-Ereignisse als Funktionen ausgeführt werden, können Sie einfach Argumente verwenden.

<p id="p" onclick="doSomething.apply(this, arguments)"> 

und

function doSomething(e) { 
    if (!e) e = window.event; 
    // 'e' is the event. 
    // 'this' is the P element 
} 

Das ‚Ereignis‘, die in der akzeptierte Antwort erwähnt wird, ist eigentlich der Name des Arguments der Funktion übergeben. Es hat nichts mit der globalen Veranstaltung zu tun.

+0

Guter Tipp. Wenn die Leute anfangen werden, Web-Komponenten zu verwenden, werden 'call()' und 'apply()' essentiell für die Emulation von Datenbindungsfähigkeiten sein, die in Mainstream-js-Frameworks verfügbar sind. Ein weiterer Trick besteht darin, etwas Ähnliches wie "Object.assign (this.querySelector ('my-btn'), this)' innerhalb einer Web-Komponente und voila, Datenbindung zu tun.Sie können auf jede Methode der übergeordneten Webkomponentenklasse über die Inline-Ereignisse onclick = "toggleBtnActive.call (this, true)" 'zugreifen. –

Verwandte Themen