Почему объект event нужно передавать в аргументе функции в Firefox при использовании jQuery?

Пример кода:
$('.block').click(function(){
        var is = $(this);

        if(!is.hasClass('active')){
            is.addClass('active')
            event.stopPropagation();
        }
    });

 На web-kit движках все работает отлично, оно и понятно event глобальный объект, но в FireFox отказывается работать, но если вставить в аргумент анонимной функции объект event:
$('.block').click(function(event){
 // тут все работает
})

FireFox заработал!

В чем может быть дело?

UPD: может дело в том, что нужно event указывать как window.event?
  • Вопрос задан
  • 2599 просмотров
Решения вопроса 2
Первый кусок кода не корректен. Использование не инициализированной переменной, вернее использование переменной window.event, которая может быть не инициализирована. В то время как в jQuery явно указано наличие параметра event в коллбеке click, в котором и приходит объект event.

Так что файрфокс, в данном, случае защитил вас от некорректного кода. думаю использование use strict; в любом браузере не позволило бы Вам такой вольности.
Ответ написан
IonDen
@IonDen
JavaScript developer. IonDen.com
elem.on("click", function (e) {
    e.preventDefault();
    e.stopPropagation();
    // и так далее
});


Фича в том, что все современные браузеры передают объект события аргументом в коллбэке. И только некоторые старые ИЕ этого не умеют и используют глобальный объект window.event. Что устарело и по сути некорректно. По этому jQuery облегчает вам задачу, приводя все ситуации к единому виду - объекту события в коллбэке.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы