Позвольте мне начать с того, что я понимаю, что приведенный ниже код имеет серьезную проблему. В частности, параметр 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
MouseEventSafari Version 6.0.2 (8536.26.17)
MouseEventIE Версия 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 для переменной, называя какие-либо рекомендации для работы с этой "функцией"?