кросс-браузерная обработка событий и поддержка jquery - PullRequest
1 голос
/ 09 мая 2011

Просто прочитайте на сайте ppk, что механизм регистрации событий в IE не устанавливает для объекта this фактический элемент, на который был нажат Вместо этого это относится к глобальному объекту окна. ниже цитируется с его сайта:

Но когда вы используете событие Microsoft регистрационная модель этого ключевого слова не ссылается на элемент HTML. В сочетании с отсутствием currentTarget-подобное свойство в Модель Microsoft, это означает, что если ты делаешь

element1.attachEvent('onclick',doSomething)
element2.attachEvent('onclick',doSomething)

вы не можете знать, какой элемент HTML в настоящее время обрабатывает событие. Это самая серьезная проблема с Модель регистрации событий Microsoft и для меня это достаточная причина, чтобы никогда не использовать даже не в IE / Win приложения.

jQuery обрабатывает это правильно! Я имею в виду, если мы сделаем что-то вроде:

$(element).click(function(){...});

this относится к элементу в вопросе. Как jquery справляется с этим для браузеров IE? Каким будет эквивалентный js-код для него?

1 Ответ

3 голосов
/ 09 мая 2011

Используя метод call, вы можете установить значение this в любой функции:

var element = document.getElementById('testy'),
    someFunction = function () {
        alert(this.id);
    };

someFunction.call(element); // alerts "testy"

Вот как почти каждая библиотека исправляет глупую ошибку "this" в IE: добавляя оболочкук слушателю, которого вы передаете, так что ваш слушатель на самом деле called.

...