srcelement propiedades files event currenttarget javascript internet-explorer events

propiedades - Evento de Internet Explorer y JavaScript currentTarget



javascript currenttarget id (13)

Bueno, no estoy seguro, pero esta puede ser una solución: ya que el elemento secundario dado por srcElement no debería tener un evento porque esto interferiría con el evento en el elemento padre ni con ningún otro elemento superior antes del elemento superior donde estaba el evento (como onmosedown = "") así que este es el código:

if (!event) event = window.event; if (event.currentTarget) element = event.currentTarget; else{element = event.srcElement; while(element.onmousedown==null) element = element.parentNode;} if(element.nodeType==3) element=element.parentNode; // defeat Safari bug

esto parece funcionar bien hasta ahora conmigo por favor corrígeme si encuentras un problema cz necesito una solución para eso no quiero usar jquery ..

¿Hay alguna manera de tomar el objetivo actual de un evento con IE 7 u 8?

Con otro navegador (firefox, opera, cromo, etc.) podemos usar event.currentTarget o también podemos usar la palabra clave this para referirnos al objeto que procesa el evento.

¡Pero en Internet Explorer no tenemos la propiedad currentTarget y this refiere al objeto window!

Entonces, ¿cómo puedo hacer eso?


Con Prototype JS puedes usar:

var target = Event.element(event);


Esta función crea currentTarget en caso de que sea IE, ¡por lo que ya no es necesario parchar el código!

function eventListener(e,t,f) { if(e.addEventListener) e.addEventListener(t,f); else e.attachEvent(''on'' + t, function(a){ a.currentTarget = e; f(a); }); }

JS regular (no funcionará en IE por debajo de 9):

function myfunction(e) { alert(e.currentTarget.id); } e = document.getElementById(''id''); e.AddEventListener(e,''mouseover'',myfunction);

Con esta función (funcionará en IE por debajo de 9):

function myfunction(e) { alert(e.currentTarget.id); } e = document.getElementById(''id''); eventListener(e,''mouseover'',myfunction);


La respuesta corta es: use jQuery.

Aunque event.currentTarget no es accesible en IE, jQuery lo normalizará para que su código también funcione en IE (como se indica here )

Tenga en cuenta que el uso de event.srcElement , como se sugiere en otras respuestas, no es equivalente, ya que srcElement corresponde al target , no a la currentTarget , como se explica al final de quirksmode.org/js/events_order.html .


Me gustaría dar una respuesta más simple, la carne de esto es lo mismo que la carne en las respuestas de anas ''y user1515360:

if (browserDoesNotUnderstandCurrentTarget) { someElement.onclick = function (e) { if (!e) { var e = window.event; } e.currentTarget = someElement; yourCallback(e); } } else { someElement.onclick = yourCallback; }

Sustituya el clic por cualquier evento que desee, por supuesto.

Esto hace que e.currentTarget esté disponible en los navegadores que no son compatibles con currentTarget.


Nota adicional: A veces IE (como por ej., 7) devolverá indefinido para event.target, por lo que ni siquiera lo evaluará como verdadero o falso (ya sea en un operador si o en un operador ternario). Además, incluso si intentas typeof event.target == ''undefined'' , seguirá generando errores diciendo "event.target is undefined". Lo cual por supuesto es estúpido porque eso es lo que estás probando.
Aparentemente es un problema con pasar eventos a funciones en IE más antiguo. Lo que debes hacer para solucionarlo es:

event = event ? event : window.event; if (typeof event.target == ''undefined'') { var target = event.srcElement; } else { var target = event.target; }

Tenga en cuenta que volverá a escribir el evento en navegadores compatibles con estándares y obtendrá el evento global para IE.


Puedes hacer algo como

target = (event.currentTarget) ? event.currentTarget : event.srcElement;

Aunque como se mencionó en @Marc, puede usar un marco JQuery que normaliza el evento para usted.


Siempre puede utilizar un cierre y pasar el elemento al que se ha asociado el controlador de eventos. Algo en esta línea ...

function handlerOnClick (currentTarget) { return function () { console.log(currentTarget); } } var domElement = document.createElement(''DIV''); domElement.innerHTML = ''Click me!''; domElement.onclick = handlerOnClick(domElement); document.body.appendChild(domElement);


Supongo que quieres usar el contexto ''esto'' porque el mismo controlador tratará con múltiples objetos posibles. En ese caso, vea el excelente script AddEvent del concurso de recodificación de modo peculiar. ( http://www.quirksmode.org/blog/archives/2005/09/addevent_recodi.html ). Este código me ha permitido sacar el último de mis javascript de html. Más importante aún, parece funcionar en todos los navegadores que he probado. Simple y compacto.


Tuve un problema similar. Lo resolví usando la palabra clave this como se indica en un artículo sobre brainjar.com

Para obtener el equivalente de la propiedad de destino actual en IE, utilice la palabra clave this como argumento al configurar el controlador de eventos en una etiqueta.

...

function myHandler (evento, enlace) {...}

En la misma página, puede encontrar la siguiente tabla:


con esta función puede pasar el objeto al agregarlo y obtenerlo en el oyente. el problema es que tiene una función anónima como eventlistener y en actionscript no puede eliminar un oyente anónimo. dunno combate js.

addEvent:function(object,type,listener,param) { if(object.addEventListener) object.addEventListener(type, function(e){ listener(object, e, param);}, false ); else if(object.attachEvent) object.attachEvent(''on''+type, function(e){ e = getEvent(e); listener(object, e, param);}); }, getEvent:function(e) { if(!e) e = window.event; // || event if(e.srcElement) e.target = e.srcElement; return e; }, removeEvent:function(object,type,listener) { if(object.removeEventListener) object.removeEventListener(type, listener, false); else object.detachEvent(''on''+type, listener); } var div = document.getElementById(''noobsafediv''); var div2 = document.getElementById(''noobsafediv2''); addEvent(div,''mouseover'',mouseover,[''astring'',111,div2]); function mouseover(object,e,param) { console.log(object,e,param); }

es mi marco y lo llamo jNoob.



Internet Explorer 6 - 8 no implementa event.currentTarget.

Cita de la Red de Desarrolladores de Mozilla :

En Internet Explorer 6 a 8, el modelo de evento es diferente. Los detectores de eventos se adjuntan con el método element.attachEvent no estándar. En este modelo, no hay equivalente a event.currentTarget y este es el objeto global. Una solución para emular la característica event.currentTarget es envolver su controlador en una función que llame al controlador utilizando Function.prototype.call con el elemento como primer argumento. De esta manera, este será el valor esperado.

Si usas jQuery de todos modos, entonces jQuery se encarga de normalizar el objeto del evento y sus propiedades (como se dijo varias veces en las otras respuestas). Cita de documentos de jQuery API :

El sistema de eventos de jQuery normaliza el objeto del evento de acuerdo con los estándares W3C.