Подтвердить что ты не робот

Неожиданный доступ к переменной "event" в браузерах?

Позвольте мне начать с того, что я понимаю, что приведенный ниже код имеет серьезную проблему. В частности, параметр event не передается в функцию. Я не понимаю, почему в приведенном ниже коде Chrome, Opera, Safari, Firefox и IE обрабатывают переменную event по-разному.

$('#eventBtn').on('click', function() {
    console.log(event);
    event.preventDefault();
});

В Chrome, Opera и Safari приведенный выше код работает. IE не работает во второй строке, и Firefox немедленно сработает. Для целей тестирования я создал немного более украшенный jsFiddle. Вывод выше console.log(event) в различных браузерах:

Chrome Version 26.0.1410.64 m
  MouseEvent {dataTransfer: null, toElement: кнопка # superBtn, fromElement: null,       y: 20, x: 33...}

Версия Opera 12.15
  MouseEvent

Safari Version 6.0.2 (8536.26.17)
  MouseEvent

IE Версия 10.0.9200.16540
  [объект MSEventObj]

Firefox Version 20.0.1
  ReferenceError: событие не определено

Я был полон этой "особенностью" Chrome, Opera и Safari, потому что он работал так, как предполагалось, не как кодированное, создающее неожиданное поведение в других браузерах. Хотя IE также имеет глобальную переменную event, в отличие от вышеупомянутых браузеров, она не назначает эту переменную событию, которое в настоящее время запускается. Firefox не имеет глобальной переменной event и поэтому не работает, как только ссылается event.

Обычно я использую e для представления переменных событий, которые, как ожидается, не совпадают во всех браузерах. Почему у Chrome, Opera и Safari есть глобальная переменная event, которую они назначают таким образом? Это где-то документировано? Кроме того, не используйте event для переменной, называя какие-либо рекомендации для работы с этой "функцией"?

4b9b3361

Ответ 1

IE всегда предоставлял глобальную переменную event, в отличие от стандартов W3C. Другие браузеры делают то же самое, чтобы обеспечить обратную совместимость с веб-сайтами, разработанными с учетом старых версий IE.

Хотя IE также имеет глобальную переменную события, в отличие от вышеупомянутых браузеров, она не присваивает эту переменную событию, которое в настоящее время запускается.

Я так считаю.