ReferenceError: событие не определено error в Firefox

Я сделал страницу для клиента, и сначала я работал в Chrome и забыл проверить, работает ли она в Firefox. Теперь у меня большая проблема, потому что вся страница основана на script, который не работает в Firefox.

Он основан на всех "ссылках", которые имеют rel, что приводит к скрытию и отображению правильной страницы. Я не понимаю, почему это не работает в Firefox.

Например, страницы имеют идентификаторы #menuPage, #aboutPage и т.д. Все ссылки имеют этот код:

<a class="menuOption" rel='#homePage' href="#">Velkommen</a> 

Он отлично работает в Chrome и Safari.

Вот код:

$(document).ready(function(){

//Main Navigation


$('.menuOption').click(function(){

  event.preventDefault();
  var categories = $(this).attr('rel');
  $('.pages').hide();
  $(categories).fadeIn();


});

// HIDES and showes the right starting menu
    $('.all').hide();
    $('.pizza').show();


// Hides and shows using rel tags in the buttons    
    $('.menyCat').click(function(event){
        event.preventDefault();
        var categori = $(this).attr('rel');
        $('.all').hide();
        $(categori).fadeIn();
        $('html,body').scrollTo(0, categori);

    });


}); 

Ответ 1

Вы неправильно объявляете (некоторые из) обработчиков событий:

$('.menuOption').click(function( event ){ // <---- "event" parameter here

    event.preventDefault();
    var categories = $(this).attr('rel');
    $('.pages').hide();
    $(categories).fadeIn();


});

Для обработчиков вам нужно "event". WebKit следует за старым поведением IE использования глобального символа для "события", но Firefox этого не делает. Когда вы используете jQuery, эта библиотека нормализует поведение и гарантирует, что обработчики событий передаются параметром события.

edit — для уточнения: вы должны указать имя параметра; используя event, дает понять, что вы намереваетесь, но вы можете назвать его e или cupcake или что-то еще.

Обратите внимание также, что причина, по которой вы, вероятно, должны использовать параметр, переданный из jQuery вместо "родной" (в Chrome и IE и Safari), состоит в том, что этот параметр (параметр) является оберткой jQuery вокруг собственного объекта события, Обертка - это то, что нормализует поведение событий в браузерах. Если вы используете глобальную версию, вы не получите этого.

Ответ 2

Это потому, что вы забыли пройти в event в функцию click:

$('.menuOption').on('click', function (e) { // <-- the "e" for event

    e.preventDefault(); // now it'll work

    var categories = $(this).attr('rel');
    $('.pages').hide();
    $(categories).fadeIn();
});

В стороне примечание e чаще используется в отличие от слова event, поскольку event является глобальной переменной в большинстве браузеров.

Ответ 3

хорошо, прежде чем делать все это, сотрудники делают это, чтобы понять, в чем ваша проблема

$ ('. menuOption'). click (функция (событие) {

 console.log('firefox looks like shit');

});