IE e.target.id не работает - PullRequest
       1

IE e.target.id не работает

18 голосов
/ 17 июля 2009
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';
    }
}

Ошибка в Internet Explorer: e.target.id не определен.

Ответы [ 4 ]

40 голосов
/ 17 июля 2009

IE не поддерживает целевое свойство, вместо этого он использует srcElement.

Изменение:

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

до:

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

Возможно, вам также понадобится добавить это в начало вашей функции:

if (!e) e = window.event

Ваш окончательный код будет выглядеть так:

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';
    }
}
5 голосов
/ 17 июля 2009

Internet Explorer не передает объект события обработчику события - он устанавливает его как свойство объекта окна. Кроме того, он использует srcElement вместо target. Попробуйте


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

2 голосов
/ 17 июля 2009

У вас классическая проблема с обработкой событий между браузерами. Я бы посоветовал использовать такую ​​библиотеку, как Prototype , JQuery , YUI или MooTools для более простой и простой обработки , Проблема в том, что IE не передает объект события. Вместо этого его можно найти как глобальный объект.

2 голосов
/ 17 июля 2009

IE не передает объект события в качестве параметра, объект события доступен как глобальный идентификатор с именем event. Также он не использует термин target, вместо этого он использует srcElement.

Следовательно, эквивалентный код для IE: -

 function check()
 { 

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

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

По этой причине фреймворки Javascript, такие как JQuery, очень популярны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...