passing - ¿Cómo pasar el evento como argumento a un controlador de eventos en línea en JavaScript?
passing arguments to event handlers (2)
// this e works
document.getElementById("p").oncontextmenu = function(e) {
e = e || window.event;
var target = e.target || e.srcElement;
console.log(target);
};
// this e is undefined
function doSomething(e) {
e = e || window.event;
var target = e.target || e.srcElement;
console.log(target);
}
<p id="p" onclick="doSomething(e)">
<a href="#">foo</a>
<span>bar</span>
</p>
Se han hecho algunas preguntas similares.
Pero en mi código, estoy tratando de obtener elementos secundarios a los que se haya hecho clic, como a
o span
.
Entonces, ¿cuál es la forma correcta de pasar el event
como un argumento al controlador de eventos, o cómo obtener eventos dentro del controlador sin pasar un argumento?
editar
Soy consciente de addEventListener
y jQuery
, proporcione una solución para pasar el evento al evento en inline
hander.
Como los eventos en línea se ejecutan como funciones, simplemente puede usar argumentos .
<p id="p" onclick="doSomething.apply(this, arguments)">
y
function doSomething(e) {
if (!e) e = window.event;
// ''e'' is the event.
// ''this'' is the P element
}
El ''evento'' que se menciona en la respuesta aceptada es en realidad el nombre del argumento pasado a la función. No tiene nada que ver con el evento global.
pasar el objeto del event
:
<p id="p" onclick="doSomething(event);">
para obtener el elemento secundario cliqueado (se debe usar con el parámetro de event
:
function doSomething(e) {
e = e || window.event;
var target = e.target || e.srcElement;
console.log(target);
}
pasar el elemento mismo (DOMElement):
<p id="p" onclick="doThing(this);">
ver ejemplo en vivo en jsFiddle