2013-12-11 10 views
73

İstemciyle ilgili bir sayfa hazırladı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ü tüm sayfa Firefox'ta çalışmayan bir senaryoya dayanıyor.ReferenceError: olay Firefox'ta bir hata tanımı yapılmamış

Bu gizleme ve sağ sayfasını gösteren götüren rel olan tüm "bağlantıları" dayanıyor. Bunun neden Firefox'ta çalışmadığını anlamıyorum. Örneğin sayfaları için

id #menuPage, #aboutPage ve benzeri var. Bu Chrome ve Safari mükemmel çalışıyor

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

: Tüm bağlantılar bu kodu var.

$(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" dediğinizde tam olarak ne demek istediğinizi açıklarsanız gerçekten yardımcı olur. ** ne oluyor? Hatalar? Kötü düzen? Kötü davranış? – Pointy

+0

Ayrıca bakınız [Parametre olarak geçilmediğinde bile neden 'olayı' değişkeni kullanılabilir?] (Http://stackoverflow.com/q/33167092/1048572) – Bergi

cevap

103

hatalı (bazılarını) etkinlik işleyicileri ilan ediyoruz:

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

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


}); 

Sen işleyicileri bir parametre olarak "olayı" ihtiyaç İşte

kodudur. WebKit, IE'nin "etkinlik" için küresel bir sembol kullanma eski davranışını izler, ancak Firefox bunu yapmaz. JQuery'yi kullanırken, bu kitaplık davranışı normalleştirir ve olay işleyicilerinizin etkinlik parametresini geçmesini sağlar.

düzenlemek — netleştirmek için: Eğer bazı parametre adı sağlamak zorunda; event kullanarak ne amaçladığınızı açıkça belirtir, ancak e veya cupcake ya da başka bir şey diyebilirsiniz.

Ayrıca, "yerel" olanı yerine (Chrome ve IE ve Safari'de) jQuery öğesinden geçirilen parametreyi kullanmanızın gerekenin nedeni, bu (bir) parametresinin, yerel olay etrafında bir jQuery sarıcısı olmasıdır. nesne. Sarıcı, tarayıcılarda etkinlik davranışını normalleştiren şeydir. Küresel sürümü kullanırsanız, bunu alamazsınız. Eğer click fonksiyonu içine event geçmek için unuttum çünkü öyle

+0

Harika teşekkürler. meteor.js, etkinlik vars bir çok kullanır. function() {.... geçme olayı olmadan hala krom ve safari'de çalışır. Ancak firefox başarısız olur. –

42

: Event beri kelime event aksine Yan not

$('.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 daha yaygın olarak kullanılan çoğu tarayıcıda küresel değişkendir .

+2

... tabii Firefox'taki hariç! Ayrılmış bir kelime veya herhangi bir şey olmadığı için parametre için "event" ismini kullanmak zarar vermez. – Pointy

+1

Çok doğru, sanırım jQuery'den "e" yi aldım! @Pointy –

+0

İlk denemede çalıştı, thanx – Amit