Почему тонкие различия между браузерами в Event Object - PullRequest
4 голосов
/ 04 февраля 2010

Следующая декларация на уровне окна:

    var event; // for IE
    var event = "anything"; // for Chrome

уничтожит объект события, как здесь:

    <div onMouseOver = "alert(event.type);">Mouseover Div</div>

Firefox не похоже ни на одно из заявлений.

Я понимаю, что объявление переменной с именем "event" - это плохой код, но мне любопытно, что здесь есть технические различия, например, что использование var в IE переинициализирует переменную в null, тогда как Chrome не будет перезаписывать объявление var, если значение не назначено явно, и, возможно, FF вообще удерживает объект события вне области объявления var окна.

Это больше любопытство. Я столкнулся с ошибкой в ​​IE на сайте вне моего контроля, что было вызвано этим, и чем больше я изучал, тем больше я замечал тонкие различия между браузерами. Просто интересно, есть ли у кого-нибудь понимание здесь.

Ответы [ 2 ]

6 голосов
/ 04 февраля 2010

В IE event является свойством объекта window и используется в функциях обработчиков событий для доступа к обрабатываемому событию.В других браузерах, таких как Firefox, ситуация такова, что в атрибуте обработчика события код JavaScript внутри атрибута вызывается так, как если бы он формировал тело функции, в которую был передан параметр с именем event, соответствующий событию.обрабатывается.Таким образом, в

<div onmouseover="alert(event.type);">Mouseover Div</div>

код наведения мыши фактически

function(event) {
    alert(event.type);
}

, а параметр event переопределяет любой event, объявленный в содержащей области, тогда как в IE это

function() {
    alert(event.type);
}

и идентификатор event разрешается как свойство глобального объекта (т. Е. window).

5 голосов
/ 04 февраля 2010

Объект "событие" в IE является свойством объекта "окно"; это глобально. В Firefox это значение создается и передается обработчикам событий.

Если вы используете jQuery или какой-либо другой фреймворк, обычно поддержка обработки событий нормализует объект «событие» во что-то, что одинаково работает во всех браузерах.

...