ReferenceError: Firefox'ta olay tanımlı değil hatası


104

Bir müşteri için bir sayfa yaptım ve başlangıçta Chrome'da çalışıyordum ve Firefox'ta çalışıp çalışmadığını kontrol etmeyi unuttum. Şimdi, büyük bir sorunum var çünkü sayfanın tamamı Firefox'ta çalışmayan bir betiğe dayanıyor.

relDoğru sayfayı gizlemeye ve göstermeye götüren tüm "bağlantılara" dayanır . Bunun Firefox'ta neden çalışmadığını anlamıyorum.

Örnek sayfalar kimliğe sahip için #menuPage, #aboutPageve bu kadar. Tüm bağlantılar şu koda sahiptir:

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

Chrome ve Safari'de mükemmel çalışıyor.

İşte kod:

$(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
"Çalışmıyor" derken tam olarak ne demek istediğini açıklarsan gerçekten yardımcı olur. Ne mu olur? Hatalar? Kötü düzen? Kötü davranış?
Sivri

Yanıtlar:


136

Olay işleyicilerinizi (bazılarını) yanlış beyan ediyorsunuz:

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

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


});

İşleyicilere bir parametre olmak için "olay" a ihtiyacınız vardır. WebKit, IE'nin "olay" için genel bir sembol kullanma şeklindeki eski davranışını izler, ancak Firefox bunu yapmaz. JQuery kullandığınızda, bu kitaplık davranışı normalleştirir ve olay işleyicilerinizin olay parametresini geçirmesini sağlar.

düzenle - açıklığa kavuşturmak için: bir parametre adı sağlamalısınız ; kullanmak event, neyi amaçladığınızı netleştirir, ancak ona eveya cupcakebaşka bir şey diyebilirsiniz .

Ayrıca, "yerel" (Chrome ve IE ve Safari'de) yerine jQuery'den iletilen parametreyi kullanmanız gerekmesinin nedeni, bu parametrenin (parametre) yerel olay nesnesi etrafında bir jQuery sarmalayıcısı olmasıdır. Sarmalayıcı, tarayıcılarda olay davranışını normalleştiren şeydir. Global sürümü kullanırsanız, bunu anlamazsınız.


Çok teşekkürler. meteor.js çok sayıda olay değişkenini kullanır. function () {.... olay geçirmeden hala krom ve safaride çalışıyor. ancak firefox başarısız olur.
Jimmy MG Lim

54

Bunun nedeni event, clickişleve girmeyi unutmuş olmanızdır :

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

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

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

Bir yan not, çoğu tarayıcıda global bir değişken olduğundan , esözcüğün aksine daha yaygın olarak kullanılır .eventEvent


3
... tabii ki Firefox dışında! Ayrılmış bir kelime veya başka bir şey olmadığı için parametre için "olay" adını kullanmak zarar vermez.
Sivri

1
Çok doğru, sanırım jQuery'den yeni aldım e! @Pointy
Mark Pieszak - Trilon.io
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.