2008-09-25 15 views
27

मैं एक HTML पृष्ठ में jQuery स्वत: पूर्ण प्लगइन का उपयोग कर रहा हूं जहां मेरे पास एक accordion मेनू भी है जो प्रोटोटाइप का उपयोग करता है।jQuery और प्रोटोटाइप संघर्ष

वे दोनों अलग-अलग काम करते हैं लेकिन जब मैंने एक ही पृष्ठ में दोनों घटकों को लागू करने का प्रयास किया तो मुझे एक त्रुटि मिली जो मुझे समझ में नहीं आया।

न आया हुआ अपवाद: nsresult: [अपवाद ... " 0x80004005 (NS_ERROR_FAILURE) [nsIDOMViewCSS.getComputedStyle] घटक विफलता कोड लौटाया": "0x80004005 (NS_ERROR_FAILURE)" स्थान: "जे एस फ्रेम :: फ़ाइल: /// C:/दस्तावेज़ और सेटिंग्स/व्यवस्थापक/डेस्कटॉप/वेबसाइट/js/jQuery-1.2.6.pack.js :: गुमनाम :: लाइन 11 "डेटा: कोई]

मुझे पता चला jQuery के साथ विरोधाभासी फ़ाइल 'effect.js' है जो accordion मेनू द्वारा उपयोग की जाती है। मैंने इस फ़ाइल को एक नए संस्करण के साथ बदलने की कोशिश की लेकिन नए एग्रीजन व्यवहार को तोड़ने लगता है।

मेरा अनुमान है कि accordion में उपयोग की जाने वाली 'effect.js' फ़ाइल को एग्रीजन डेमो आउटपुट प्राप्त करने के लिए संशोधित किया गया था। मैंने अन्य पुस्तकालयों के साथ संघर्ष से बचने के लिए ओवरराइडिंग विधियों का उपयोग करने की कोशिश की और यह काम नहीं किया।

मैंने stickmanlabs.com से accordion डेमो प्राप्त किया।

और jQuery ऑटोकंपलेट jQuery site से प्राप्त किया जा सकता है।

क्या किसी और ने इस मुद्दे का अनुभव किया है?

+0

http://docs.jquery.com/Using_jQuery_with_Other_Libraries – giorgio79

उत्तर

10

jQuery आपको अन्य पुस्तकालयों के साथ नामस्थान संघर्ष से बचने के लिए $ से jQuery फ़ंक्शन का नाम बदलने देता है।

आप की तरह इस

var J = jQuery.noConflict(); 

विवरण यहाँ कुछ कर सकते हैं: michaelshadle.com — jQuery's no-conflict mode: yet another reason why it's the best

117

दो संभव समाधान कर रहे हैं: Scriptaculous और jQuery के एक पुराने संस्करण के साथ कोई विरोध नहीं था (Scriptaculous विस्तार करने के लिए प्रयास कर रहा था देशी ऐरे प्रोटोटाइप गलत तरीके से) - पहले स्क्रिप्टैकुलस की अपनी प्रति को अपग्रेड करने का प्रयास करें।

यदि यह काम नहीं करता है तो आपको noConflict() (ऊपर उल्लिखित अनुसार) का उपयोग करने की आवश्यकता होगी। हालांकि, एक पकड़ है। आप एक प्लगइन शामिल कर रहे हैं जब से तुम एक विशेष क्रम में शामिल करने के लिए, उदाहरण के लिए की आवश्यकता होगी:

<script src="jquery.js"></script> 
<script src="jquery.autocomplete.js"></script> 
<script> 
    jQuery.noConflict(); 
    jQuery(document).ready(function($){ 
    $("#example").autocomplete(options); 
    }); 
</script> 
<script src="prototype.js"></script> 
<script src="effects.js"></script> 
<script src="accordion.js"></script> 

आशा इस स्थिति स्पष्ट करने में मदद करता है।

+38

जॉन Resig खुद से एक जवाब की तुलना में बेहतर नहीं कर सकते! – alex

8

मुझे वास्तव में इस मामले में दोनों पुस्तकालयों का उपयोग करने का कारण नहीं दिखता है।

आप या तो प्रोटोटाइप (अच्छी तरह से, स्क्रिप्टैकियस 'वास्तव में) Ajax.Autocompleter का उपयोग कर सकते हैं और jQuery को डुबो सकते हैं, या आप jQuery के Accordion का उपयोग कर सकते हैं और प्रोटोटाइप से छुटकारा पा सकते हैं।

  1. वे संघर्ष का कारण कर सकते हैं:

    एक ही बार में दोनों पुस्तकालयों का उपयोग नहीं वास्तव में एक अच्छा विचार है, क्योंकि है।

  2. दोनों को शामिल करके आप दोनों को अपने उपयोगकर्ताओं को डाउनलोड करने के लिए मजबूर करते हैं। जो बैंडविड्थ अनुकूल दृष्टिकोण नहीं है।
+0

सहमत हैं। इस तरह दो जावास्क्रिप्ट ढांचे का उपयोग करने का कोई अच्छा कारण नहीं है। भले ही आप प्रोटोटाइप में jquery और नियंत्रक वाई में नियंत्रक एक्स पसंद करते हैं। अतिरिक्त डाउनलोड और संघर्ष। – Espen

+0

* इस तरह के दो जावास्क्रिप्ट ढांचे का उपयोग करने का कोई अच्छा कारण कभी नहीं है। * हां वहाँ है। उदाहरण के लिए, jQuery के साथ ड्रूपल सीएमएस जहाजों, और कई ने मॉड्यूल का विस्तार किया और इस नींव पर निर्माण किया। हालांकि, ऐसी परिस्थितियां हैं जहां आप उस निफ्टी जावास्क्रिप्ट गैजेट को जोड़ना चाहते हैं जिसमें 1: 1 jquery समतुल्य नहीं है। इसके अलावा, सनस्पीडर बेंचमार्क डेटा के अनुसार, प्रत्येक जावास्क्रिप्ट ढांचे में प्रदर्शन के संबंध में इसकी अपनी ताकत और कमजोरियां होती हैं .. इसलिए यह जानना बहुत अच्छा है कि ड्रूपल 7 आखिरकार अज्ञात कार्यों के भीतर सभी jquery कोड को लपेटने के लिए डिफ़ॉल्ट है! –

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