ReferenceError: Ereignis ist kein definierter Fehler in Firefox

104

Ich habe eine Seite für einen Client erstellt und arbeitete ursprünglich in Chrome und habe vergessen zu überprüfen, ob sie in Firefox funktioniert. Jetzt habe ich ein großes Problem, da die gesamte Seite auf einem Skript basiert, das in Firefox nicht funktioniert.

Es basiert auf allen "Links", die dazu relführen, dass die richtige Seite ausgeblendet und angezeigt wird. Ich verstehe nicht, warum dies in Firefox nicht funktioniert.

Zum Beispiel Seiten die ID haben #menuPage, #aboutPageund so weiter. Alle Links haben diesen Code:

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

Es funktioniert perfekt in Chrome und Safari.

Hier ist der Code:

$(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);

    });


}); 
Måns Dahlström
quelle
2
Es wäre sehr hilfreich, wenn Sie genau erklären würden, was Sie meinen, wenn Sie sagen, dass es "nicht funktioniert". Was ist passiert? Fehler? Schlechtes Layout? Schlechtes Verhalten?
Pointy

Antworten:

136

Sie deklarieren (einige) Ihrer Event-Handler falsch:

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

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


});

Sie benötigen "event", um ein Parameter für die Handler zu sein. WebKit folgt dem alten Verhalten des IE, ein globales Symbol für "Ereignis" zu verwenden, Firefox jedoch nicht. Wenn Sie jQuery verwenden, normalisiert diese Bibliothek das Verhalten und stellt sicher, dass Ihren Ereignishandlern der Ereignisparameter übergeben wird.

bearbeiten - klären: Sie bereitstellen müssen einige Parameter - Namen; indem eventer deutlich macht , was Sie beabsichtigen, aber man kann es nennen eoder cupcakeoder irgendetwas anderes.

Beachten Sie auch, dass der Grund, warum Sie wahrscheinlich den von jQuery übergebenen Parameter anstelle des "nativen" (in Chrome und IE und Safari) übergeben sollten, darin besteht, dass dieser (der Parameter) ein jQuery-Wrapper um das native Ereignisobjekt ist. Der Wrapper normalisiert das Ereignisverhalten in allen Browsern. Wenn Sie die globale Version verwenden, erhalten Sie das nicht.

Spitze
quelle
Vielen Dank. meteor.js verwendet viele Ereignisvariablen. function () {.... ohne passierendes Ereignis funktioniert immer noch in Chrome und Safari. Allerdings würde Firefox scheitern.
Jimmy MG Lim
54

Es ist, weil Sie vergessen haben, eventin die clickFunktion zu übergeben:

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

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

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

Auf einer Seite beachten, ewird häufiger im Gegensatz zu dem Wort verwendet , eventda Eventeine globale Variable in den meisten Browsern ist.

Mark Pieszak - Trilon.io
quelle
3
... außer natürlich in Firefox! Es tut nicht weh, den Namen "event" für den Parameter zu verwenden, da es sich nicht um ein reserviertes Wort oder etwas anderes handelt.
Pointy
1
Sehr wahr, ich glaube, ich habe gerade evon jQuery abgeholt ! @Pointy
Mark Pieszak - Trilon.io