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

Błąd w przeglądarce Internet Explorer: e.target.id jest niezdefiniowany.IE e.target.id nie działa

+0

Czy naprawdę trudno jest sprawdzić swój post przed opublikowaniem? Tym razem naprawiłem dla ciebie kod, przynajmniej trochę. Chcesz, aby inni poświęcili czas na zapoznanie się z Twoim kodem, więc poświęć trochę czasu, aby uczynić go czytelnym. Wciąż jest dla ciebie trochę formatowania. – OregonGhost

+0

Nie wiem, jak wstawiać kody ... gdzie mogę uzyskać te informacje – coderex

+0

Po wprowadzeniu kodu, wybierz go i naciśnij przycisk z "101 010" na nim – Greg

Odpowiedz

40

Narzędzie IE nie obsługuje właściwości target, w zamian używają polecenia srcElement.

Zmiana:

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

do:

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

Być może trzeba dodać to na początku swojej funkcji:

if (!e) e = window.event 

Twój ostateczny kod będzie wyglądać następująco :

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

jeśli IE nie obsługuje właściwości 'target', wówczas twój kod' e.target.id' będzie błędem referencyjnym o wartości pustej, jak tylko IE go trafi. –

+0

Myślę, że '(e.target.id || e.srcElement.id)' nadal będzie zgłaszać błąd w IE, ponieważ będzie próbował uzyskać dostęp do właściwości 'id' właściwości' target', ale 'target' nie istnieje. –

+0

Dobry połów. Naprawiłem problem. – Prestaul

2

IE nie przekazuje obiektu zdarzenia jako parametru, obiekt zdarzenia jest dostępny jako globalny identyfikator o nazwie event. Również nie używa terminu cel, zamiast tego używa srcElement.

Stąd kod odpowiednik dla IE jest: -

function check() 
{ 

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

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

ITS, dla tej przyczyny, że środowisk JavaScript, takich jak JQuery są tak popularne.

+0

Dziękuję panu, jego pracy. :) – coderex

2

Masz klasyczny problem związany z obsługą wielu przeglądarek. Poradziłbym sobie, używając biblioteki, takiej jak Prototype, JQuery, YUI lub MooTools do obsługi tego w znacznie prostszy i bardziej przejrzysty sposób. Problem polega na tym, że IE nie przekazuje obiektu zdarzenia. Zamiast tego można go znaleźć jako obiekt globalny.

5

Program Internet Explorer nie przekazuje obiektu zdarzenia do obsługi zdarzenia - zamiast tego ustawia go jako właściwość obiektu okna. Ponadto używa srcElement zamiast target. Wypróbuj


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

Ponadto, jest to 'document.onclick = ...', a nie 'document.click = ...' –

+0

Och, to jQuery ... :) –