#javascript
#javascript #jquery #обработка событий #глобальный #jquery-события
Вопрос:
Во время работы над ответом на другой вопрос возникла странная ошибка, связанная с тем, что event
объект был доступен в анонимной функции без передачи. В Chrome приведенное ниже работает нормально, но Firefox выдает ошибку.
$(document).ready(function() {
$("#uspsSideboxTrackingClose").click(function() {
event.preventDefault();
console.log(event);
});
});
Chrome:
FireFox:
Ошибка ссылки: событие не определено
Уже известно, что
$("#uspsSideboxTrackingClose").click(function(event) { .. }
работает в обоих браузерах. Вот код-нарушитель. Это ошибка в Chrome или Firefox или предполагаемое поведение обоих браузеров? Какой браузер подходит?
Комментарии:
1. Вы, вероятно, имели в виду
$("#uspsSideboxTrackingClose").click(function(event) {
, не так ли?2. Да! Совершенно верно. Спасибо.
3. Также обратите внимание, что я вижу ту же ошибку в IE10
Ответ №1:
В IE объект event был глобальным объектом (который не передается функции-обработчику), но к нему обращаются как к глобальному объекту. Вы также можете получить к нему доступ как к свойству объекта window, например window.event
В FF и других браузерах объект event был передан в качестве аргумента, поскольку в FF не вызывается глобальное свойство event
, вы получаете сообщение об ошибке.
В Chrome добавлена поддержка обеих этих функций, поэтому вы получите объект event в качестве глобальной ссылки и в качестве аргумента.
Но поскольку вы используете jQuery, jQuery нормализует эти два поведения и всегда будет передавать объект event в качестве аргумента обработчику события.
$(document).ready(function () {
$("#uspsSideboxTrackingClose").click(function (event) {
event.preventDefault();
console.log(event);
});
});
Комментарии:
1. Имеет смысл. Зачем им это делать?
2. Поддерживаете функцию? Я бы назвал это «сохранить совместимость с ошибкой M $».
3. то же самое выдает ошибку и в ie, хотя это странно, исходя из глобального объекта… но из-за длительной работы с jQuery мне кажется нормальным
4. Спасибо за подробный и ясный ответ, также объясняющий об IE. Молодец.
5. Документация, на которую вы ссылаетесь, очень устарела. Только очень старые версии Internet Explorer не поддерживают передачу объекта event в качестве первого аргумента функции-обработчика событий.