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

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

+0

Неужели так сложно проверить ваше сообщение перед публикацией? На этот раз я исправил код для вас, по крайней мере, немного. Вы хотите, чтобы другие нашли время, чтобы посмотреть на ваш код, поэтому найдите время, чтобы сделать его доступным для чтения. Для вас все еще есть форматирование. – OregonGhost

+0

i dont knw как вставлять коды .. где я получу эту информацию – coderex

+0

Когда вы вводите код, выберите его и нажмите кнопку с «101 010» на нем – Greg

ответ

40

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

, если IE не поддерживает свойство 'target', тогда ваш код' e.target.id' будет пустой ошибкой ссылки, как только IE попадет в нее. –

+0

Я думаю, что '(e.target.id || e.srcElement.id)' все равно будет вызывать ошибку в IE, поскольку он попытается получить доступ к свойству 'id' свойства' target', но 'target' делает не существует. –

+0

Хороший улов. Я исправил проблему. – Prestaul

2

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

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

+0

Спасибо, сэр, его работа. :) – coderex

2

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

5

Internet Explorer не передает объект события обработчику событий - вместо этого он устанавливает его как свойство объекта window. Кроме того, он использует 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'; 
    } 
} 

+0

Кроме того, это 'document.onclick = ...', а не 'document.click = ...' –

+0

О, это jQuery ... :) –

Смежные вопросы