2009-07-17 5 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'; 
    } 
} 

Erreur dans Internet Explorer: e.target.id n'est pas défini.IE e.target.id ne fonctionne pas

+0

Est-ce vraiment si difficile de vérifier votre message avant de poster? Cette fois, j'ai corrigé le code pour vous, au moins un peu. Vous voulez que les autres prennent le temps de regarder votre code, alors prenez le temps de le rendre lisible. Il y a encore du formatage à faire pour vous. – OregonGhost

+0

je ne sais pas comment insérer des codes .. où puis-je obtenir cette information – coderex

+0

Lorsque vous mettez du code, sélectionnez-le et appuyez sur le bouton "101 010" dessus – Greg

Répondre

40

IE ne prend pas en charge la propriété target, ils utilisent plutôt srcElement.

Change:

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

à:

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

Vous devrez peut-être ajouter ceci au début de votre fonction:

if (!e) e = window.event 

Votre code final ressemblerait à ceci :

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 ne supporte pas la propriété 'target', alors votre code' e.target.id' sera une erreur de référence nulle dès que IE l'atteindra. –

+0

Je pense que '(e.target.id || e.srcElement.id)' lancera quand même une erreur dans IE, car il essaiera d'accéder à la propriété 'id' de la propriété' target', mais 'target' n'existe pas. –

+0

Bonne prise. J'ai résolu le problème. – Prestaul

2

IE ne passe pas un objet événement en tant que paramètre, l'objet événement est accédé en tant qu'identificateur global appelé event. En outre, il n'utilise pas le terme cible, mais utilise srcElement.

D'où le code équivalent pour IE est: -

function check() 
{ 

    var obj = document.getElementById('calendar_widget'); 

    if (obj != 'null') 
    { 
     if (event.srcElement.id != 'show_calender') 
      obj.style.display='none'; 
    } 
} 

Son pour cette raison que les cadres tels que Javascript JQuery sont si populaires.

+0

Merci monsieur, son fonctionnement. :) – coderex

2

Vous avez un problème classique de gestion des événements multi-navigateur. Je conseille d'utiliser une bibliothèque comme Prototype, JQuery, YUI ou MooTools pour gérer cela d'une manière beaucoup plus facile et directe. Le problème est que IE ne passe pas l'objet événement. Au lieu de cela, il peut être trouvé en tant qu'objet global.

5

Internet Explorer ne transmet pas l'objet d'événement au gestionnaire d'événements - il le définit comme une propriété de l'objet window à la place. En outre, il utilise srcElement au lieu de target. Essayez


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

Aussi, c'est 'document.onclick = ...', pas 'document.click = ...' –

+0

Oh, ce jQuery ... :) –

Questions connexes