javascript - currenttarget - event target properties
IE e.target.id no está funcionando (4)
document.click = check;
function check(e)
{
var obj = document.getElementById(''calendar_widget'');
if (obj != ''null'')
{
if (e.target.id != ''show_calender'')
obj.style.display=''none'';
}
}
El error está en Internet Explorer: e.target.id no está definido.
IE no admite la propiedad de destino, en su lugar utilizan srcElement.
Cambio:
if (e.target.id != ''show_calender'')
a:
if ((e.target || e.srcElement).id != ''show_calender'')
Es posible que también deba agregar esto al comienzo de su función:
if (!e) e = window.event
Tu código final se vería así:
function check(e) {
if (!e) e = window.event;
var obj = document.getElementById(''calendar_widget'');
if (obj != ''null'') {
if ((e.target || e.srcElement).id != ''show_calender'')
obj.style.display=''none'';
}
}
IE no pasa un objeto de evento como parámetro, se accede al objeto de evento como un identificador global llamado event
. Además, no usa el término destino, en su lugar usa srcElement
.
Por lo tanto, el código equivalente para IE es:
function check()
{
var obj = document.getElementById(''calendar_widget'');
if (obj != ''null'')
{
if (event.srcElement.id != ''show_calender'')
obj.style.display=''none'';
}
}
Es por esta razón que los marcos de Javascript como JQuery son tan populares.
Internet Explorer no pasa el objeto de evento al controlador de eventos, sino que lo establece como una propiedad del objeto de ventana. Además, usa srcElement
lugar de target
. Tratar
document.click = check;
function check(e)
{
var target = e ? e.target : window.event.srcElement;
var obj = document.getElementById(''calendar_widget'');
if (obj != ''null'')
{
if (target.id != ''show_calender'')
obj.style.display=''none'';
}
}
Tienes un problema clásico de manejo de eventos en varios navegadores. Yo aconsejaría usar una biblioteca como Prototype , JQuery , YUI o MooTools para manejar esto de una manera mucho más fácil y directa. El problema es que IE no pasa el objeto de evento. En su lugar, se puede encontrar como un objeto global.