2009-07-17 31 views
18
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'; 
    } 
} 

Error en Internet Explorer: e.target.id no está definido.IE e.target.id no funciona

+0

¿Realmente es tan difícil comprobar su publicación antes de publicarla? Esta vez arreglé el código para ti, al menos un poco. Desea que los demás se tomen el tiempo para ver su código, así que tómese el tiempo para hacerlo legible. Todavía hay algo de formato que hacer por usted. – OregonGhost

+0

no sé cómo insertar códigos ... ¿dónde obtengo esta información? – coderex

+0

Cuando ingresa el código, selecciónelo y presione el botón con "101 010" en él – Greg

Respuesta

40

IE no es compatible con la propiedad de destino, sino que utilizan srcElement.

Cambio:

if (e.target.id != 'show_calender') 

a:

if ((e.target || e.srcElement).id != 'show_calender') 

También puede ser necesario añadir esto al comienzo de su función:

if (!e) e = window.event 

Su código final sería el siguiente :

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'; 
    } 
} 
+1

si IE no admite la propiedad 'objetivo', entonces su código' e.target.id' va a ser un error de referencia nulo tan pronto como IE lo golpee. –

+0

Creo que '(e.target.id || e.srcElement.id)' aún lanzará un error en IE, ya que intentará acceder a la propiedad 'id' de la propiedad' target', pero 'target' no no existe. –

+0

Buena captura. He solucionado el problema. – Prestaul

2

IE no pasa un objeto de evento como parámetro, se accede al objeto de evento como un identificador global llamado event. Tampoco usa el término objetivo, en su lugar usa srcElement.

De ahí que 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'; 
    } 
} 

Su por esta razón que los marcos de Javascript como jQuery son tan populares.

+0

Gracias señor, está funcionando. :) – coderex

2

Tiene un evento clásico que maneja un problema entre navegadores. Aconsejo 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.

5

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 en lugar de target. Pruebe


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'; 
    } 
} 

+0

Además, es 'document.onclick = ...', no 'document.click = ...' –

+0

Oh, esto jQuery ... :) –