2013-12-11 12 views
73

में ईवेंट परिभाषित त्रुटि नहीं है मैंने क्लाइंट के लिए एक पृष्ठ बनाया है और मैं शुरुआत में क्रोम में काम कर रहा था और यह जांचना भूल गया कि यह फ़ायरफ़ॉक्स में काम कर रहा है या नहीं। अब, मुझे एक बड़ी समस्या है क्योंकि पूरा पृष्ठ एक स्क्रिप्ट पर आधारित है जो फ़ायरफ़ॉक्स में काम नहीं करता है।संदर्भ त्रुटि: फ़ायरफ़ॉक्स

यह उन सभी "लिंक" पर आधारित है जिनमें rel है जो सही पृष्ठ को छिपाने और दिखाने की ओर जाता है। मुझे समझ में नहीं आता कि यह फ़ायरफ़ॉक्स में क्यों काम नहीं कर रहा है।

उदाहरण के लिए पृष्ठों में आईडी #menuPage, #aboutPage और इसी तरह के हैं।

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

यह क्रोम और सफारी में पूरी तरह से काम कर रहा है: सभी लिंक इस कोड है।

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

+0

यह भी देखें [पैरामीटर के रूप में पारित होने पर भी 'ईवेंट' चर उपलब्ध क्यों है?] (Http://stackoverflow.com/q/33167092/1048572) – Bergi

उत्तर

103

आप गलत तरीके से (कुछ) अपने ईवेंट हैंडलर्स घोषणा कर रहे:

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

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


}); 

आप "घटना" की जरूरत है संचालकों के लिए एक पैरामीटर होने की

यहाँ कोड है। वेबकिट "घटना" के लिए वैश्विक प्रतीक का उपयोग करने के आईई के पुराने व्यवहार का पालन करता है, लेकिन फ़ायरफ़ॉक्स नहीं करता है। जब आप jQuery का उपयोग कर रहे हैं, तो वह लाइब्रेरी व्यवहार को सामान्य करती है और यह सुनिश्चित करती है कि आपके ईवेंट हैंडलर ईवेंट पैरामीटर पास कर चुके हों।

संपादित — स्पष्ट करने के लिए: यदि आप कुछ पैरामीटर नाम प्रदान करने के लिए है, event का उपयोग करके यह स्पष्ट हो जाता है कि आप क्या चाहते हैं, लेकिन आप इसे e या cupcake या कुछ और कह सकते हैं।

यह भी ध्यान दें कि आपको "मूल" (क्रोम और आईई और सफारी में) के बजाय jQuery से पारित पैरामीटर का उपयोग करना चाहिए, यह है कि एक (पैरामीटर) मूल घटना के आस-पास एक jQuery wrapper है वस्तु। रैपर ब्राउज़र में ईवेंट व्यवहार को सामान्य करता है। यदि आप वैश्विक संस्करण का उपयोग करते हैं, तो आपको वह नहीं मिलता है।

+0

ग्रेट धन्यवाद। meteor.js घटना युद्धों के बहुत सारे का उपयोग करता है। फ़ंक्शन() {.... घटना उत्तीर्ण किए बिना क्रोम और सफारी में अभी भी काम करता है। हालांकि फ़ायरफ़ॉक्स विफल हो जाएगा। –

42

यह इसलिए है क्योंकि आप click समारोह में event में पारित करने के लिए भूल गया:

$('.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 करने का विरोध किया जाता है अधिकांश ब्राउज़र में एक वैश्विक चर रहा है ।

+2

... पाठ्यक्रम के फ़ायरफ़ॉक्स को छोड़कर! यह पैरामीटर के लिए "ईवेंट" नाम का उपयोग करने में कोई दिक्कत नहीं करता है, क्योंकि यह आरक्षित शब्द या कुछ भी नहीं है। – Pointy

+1

बहुत सच है, मुझे लगता है कि मैंने अभी jQuery से 'e' उठाया है! @Pointy –

+0

यह पहले प्रयास, thanx में काम किया – Amit

संबंधित मुद्दे