ReferenceError : Firefox에서 이벤트가 정의되지 않았습니다.


104

클라이언트 용 페이지를 만들었는데 처음에는 Chrome에서 작업 중이었고 Firefox에서 작동하는지 확인하는 것을 잊었습니다. 이제 전체 페이지가 Firefox에서 작동하지 않는 스크립트를 기반으로하기 때문에 큰 문제가 있습니다.

rel올바른 페이지를 숨기고 표시하도록 이끄는가있는 모든 "링크"를 기반으로합니다 . Firefox에서 이것이 작동하지 않는 이유를 이해할 수 없습니다.

인스턴스 페이지가 ID를 위해 #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);

    });


}); 

2
당신이 "작동하지 않는다"고 말할 때 당신이 의미하는 바를 정확히 설명한다면 정말 도움이 될 것입니다. 무슨 일 일어나나요? 오류? 잘못된 레이아웃? 나쁜 행동?
Pointy '

답변:


136

이벤트 핸들러 (일부)를 잘못 선언하고 있습니다.

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

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


});

핸들러에 대한 매개 변수가 되려면 "이벤트"가 필요합니다. WebKit은 "이벤트"에 전역 기호를 사용하는 IE의 이전 동작을 따르지만 Firefox는 그렇지 않습니다. jQuery를 사용하는 경우 해당 라이브러리는 동작을 정규화하고 이벤트 핸들러가 이벤트 매개 변수를 전달하는지 확인합니다.

편집 - 명확히 : 사용자가 제공해야 할 몇 가지 매개 변수 이름을; 사용 event당신이 무슨 의도 취소,하지만 당신은 그것을 호출 할 수 있습니다 차종을 e하거나 cupcake다른 사람 또는 아무것도.

또한 "기본"매개 변수 (Chrome 및 IE 및 Safari) 대신 jQuery에서 전달 된 매개 변수를 사용해야하는 이유는 매개 변수 (매개 변수)가 기본 이벤트 객체를 둘러싼 jQuery 래퍼이기 때문입니다. 래퍼는 브라우저에서 이벤트 동작을 정규화하는 것입니다. 글로벌 버전을 사용하면 이해하지 못합니다.


감사합니다. meteor.js는 많은 이벤트 변수를 사용합니다. function () {.... 이벤트를 전달하지 않고 여전히 chrome 및 safari에서 작동합니다. 그러나 firefox는 실패합니다.
Jimmy MG Lim

54

당신이 통과하는 것을 잊었다 때문이다 eventclick기능 :

$('.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
... 물론 Firefox를 제외하고! 매개 변수에 "event"라는 이름을 사용해도 괜찮습니다. 예약어나 그 밖의 것이 아니기 때문입니다.
Pointy '2013-12-11

1
매우 사실입니다. 방금 ejQuery에서 가져온 것 같습니다 ! @Pointy
Mark Pieszak-Trilon.io 2013 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.