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
「うまくいかない」と言ったときの意味を正確に説明してくれると助かります。何起こりますか?エラー?悪いレイアウト?良くない行為?
先のとがった

回答:


136

イベントハンドラ(の一部)を誤って宣言しています。

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

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


});

ハンドラーのパラメーターとして「イベント」が必要です。WebKitは、「イベント」にグローバルシンボルを使用するというIEの古い動作に従いますが、Firefoxはそうではありません。jQueryを使用している場合、そのライブラリは動作を正規化し、イベントハンドラーにイベントパラメーターが確実に渡されるようにします。

編集 —明確にするために:パラメータ名を指定する必要があります。使用してevent、それはあなたが意図し何を明らかにし、あなたはそれを呼び出すことができますecupcakeまたは何か。

また、おそらく「ネイティブ」パラメーター(ChromeおよびIEおよびSafari)ではなくjQueryから渡されるパラメーターを使用する必要があるのは、そのパラメーター(パラメーター)がネイティブイベントオブジェクトのjQueryラッパーであるためです。ラッパーは、ブラウザー間でイベントの動作を正規化するものです。グローバルバージョンを使用する場合、それは取得されません。


まことにありがとうございます。meteor.jsは多くのイベント変数を使用します。function(){....イベントを渡さなくても、ChromeとSafariで機能します。ただし、Firefoxは失敗します。
ジミーMGリム2014年

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対照的に、がより一般的に使用されています。eventEvent


3
...もちろんFirefoxを除いて!予約語などではないため、パラメーターに「イベント」という名前を使用しても問題ありません。
先のとがった

1
ほんとうにe、jQueryからピックアップしたと思います!@Pointy
Mark Pieszak-Trilon.io 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.