Что это такое в IE attachEvent - PullRequest
       20

Что это такое в IE attachEvent

7 голосов
/ 09 февраля 2012

Я устал от написания jQuery, поэтому я решил изучить какой-то сырой JavaScript.Что-то в attachEvent IE меня смутило.Вот код.

var btn = document.getElementById('myBtn');

btn.onclick = function(){
   alert(window.event.srcElement === this); //true, I know why.
};

btn.attachEvent('onclick', function(event){
   alert(event.srcElement === this); //fasle, but why?
});

Я пытаюсь использовать встроенные в IE инструменты отладки, но он просто сказал мне, что «this» - это объект, но не более того ... так что же такое «this» в IEattachEvent

Ответы [ 3 ]

7 голосов
/ 09 февраля 2012

В обработчике событий, связанном с IE-специфическим методом attachEvent, this относится к глобальному window объекту:

btn.attachEvent('onclick', function(event) {
    alert(this === window); // true
}

Напротив, в обработчике события, связанном стандартным методом addEventListener, this относится к элементу DOM, из которого был вызван обработчик события.

0 голосов
/ 09 февраля 2012

Я думаю, вы неправильно написали одно слово.



    btn.attachEvent('onclick', function(event){
            alert(event.**srcElement** === this);
    });

И я протестировал соответствующую функцию addEventListener в chrome и ff, они оба вернули true.

IE действительно возвращает false. Возможно, потому что IE имеет дело с btn.onclick = fn; и btn.attachEvent () другим способом. IE передает глобальное значение (окно) методу btn.attachEvent (). Вы можете проверить это === окно , оно возвращает true.

Есть какие-нибудь комментарии по этому поводу?

0 голосов
/ 09 февраля 2012

это контекстная ссылка и ссылка на окно, когда происходит событие click, потому что это единственный контекст, существующий в то время.

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