2009-07-21 15 views
10

के साथ JQuery संघर्ष मैं मॉड्यूल के लिए jquery का उपयोग करता हूं। मेरा जूमला टेम्पलेट में एक एकीकृत jQuery मेनू है। तो वे एक दूसरे के साथ संघर्ष करते हैं।अन्य JQuery लाइब्रेरी

क्या इस समस्या को हल करने का कोई तरीका है। मॉड्यूल के स्क्रिप्ट कोड के बाद

<script type="text/javascript" charset="utf-8"> 
    window.onload = function() { 
     var container = jQuery('div.sliderGallery'); 
     var ul = jQuery('ul', container); 

     var itemsWidth = ul.innerWidth() - container.outerWidth(); 

     jQuery('.slider', container).slider({ 
      min: 0, 
      max: itemsWidth, 
      handle: '.handle', 
      stop: function (event, ui) { 
       ul.animate({'left' : ui.value * -1},340); 
      }, 
      slide: function (event, ui) { 
       ul.css('left', ui.value * -1); 
      } 
     }); 
    }; 
</script> 

उत्तर

2

कोशिश

var J = jQuery.noConflict(); 
कि उपयोग जम्मू बजाय $ या jQuery के चर के बाद

अपने कस्टम कोड के लिए

+0

यह उत्तर पर्याप्त नहीं है। आपको यह निर्दिष्ट करना होगा कि आप कौन सी लाइब्रेरी को "जे" का उपयोग करने के लिए फिर से मानचित्र करना चाहते हैं। गलत जगह पर इसे लिखने से अलग-अलग परिणाम मिल सकते हैं। – vsync

+0

मुझे नहीं पता कि आपका मतलब क्यों है। समझाने। – mkoryak

+0

यहां "jQuery" क्या आता है? मैं नेमस्पेस प्रदूषित किए बिना jQuery (एक विशिष्ट संस्करण) jQuery कैसे लोड करूं? –

1

कोशिश

jQuery.noConflict(); 

जैसे

<script type="text/javascript" charset="utf-8"> 
    $(document).ready(function() { 
     var container = jQuery('div.sliderGallery'); 
     var ul = jQuery('ul', container); 

     var itemsWidth = ul.innerWidth() - container.outerWidth(); 
     jQuery.noConflict(); 
     jQuery('.slider', container).slider({ 
      min: 0, 
      max: itemsWidth, 
      handle: '.handle', 
      stop: function (event, ui) { 
       ul.animate({'left' : ui.value * -1},340); 
      }, 
      slide: function (event, ui) { 
       ul.css('left', ui.value * -1); 
      } 
     }); 
    }); 
</script> 

मैंने लोड किए गए दस्तावेज़ की जांच के लिए jQuery का उपयोग करने के लिए अपना कोड अपडेट किया है। NoConflict फ़ंक्शन का उपयोग करने के लिए विवरण here है।

+0

मैं अपना कोड कॉपी करता हूं और इसे अपनी फाइल में पेस्ट करता हूं लेकिन यह कुछ भी नहीं बदलता है। क्या मुझे कुछ और करना है? –

4

आपकी समस्या को ठीक करने के लिए आपको क्या करने की आवश्यकता है jQuery फ़ंक्शन को अन-उपनाम करें और इसे किसी अन्य चर नाम पर असाइन करें (याद रखें: चर कार्य हो सकते हैं)। फ़ंक्शन को अन-उपनाम के लिए आपको jQuery.noConflict() फ़ंक्शन का उपयोग करने की आवश्यकता है। यहाँ एक के बाद एक यह करने के लिए:

// ...after all of Joomla's JS is done executing... 

// before loading your version of jQuery var jquery = {}; // aka new Object() 
jquery.joomla = jQuery.noConflict(); // moves jQuery into another namespace 

// load your version 

अब, जब आप अपने संस्करण लोड करते हैं, यह jQuery और $ नामस्थान कार्यभार ग्रहण करेंगे, लेकिन आप अभी भी जूमला के jQuery कार्य करने के लिए अन्य संदर्भ होगा यदि आप इसे की जरूरत है। फिर से दोहराने में, बुनियादी प्रवाह है:

  1. लोड जूमला के jQuery
  2. भागो जूमला के jQuery निर्भर कोड
  3. ले जाएँ जूमला jQuery एक और नाम स्थान
  4. में लोड अपने jQuery
  5. का उपयोग कर अपने कोड निष्पादित $()
+2

"जूमला jQuery को किसी अन्य नेमस्पेस में ले जाएं" - ऐसा कोई अच्छा विचार नहीं है, क्योंकि यह कहीं और बाद में चला सकता है और पुराने नामस्थान की तलाश कर सकता है, इसके बजाय, आपको अपने नए jQuery का नाम बदलकर j $ कर देना चाहिए। – vsync

0

क्या आपका मतलब यह था कि आपके जूमला ने एक ही समय में 2 प्रकार की jquery लोड की थी? 1 आपका मेनू लोड jquery और फिर आपका मॉड्यूल लोड jquery? , जूमला टेम्पलेट्स में हम मॉड्यूल या घटक विचारों अधिभावी कर सकते हैं

  1. अपने टेम्पलेट में

    नाम वाली निर्देशिका बनाएँ:

    यहाँ समाधान है (मैं आप का उपयोग करना चाहिए जूमला 1.5.x सही मान?) html/ जैसे: टेम्पलेट्स/yourtemplate/html/

  2. प्रति मॉड्यूल से फ़ाइल/mod_yourMenu/Tmpl /.* अपने अपने टेम्पलेट html में (टेम्पलेट्स/yourtemplate/html/mod_yourMenu /) - नहीं> * यदि आप करते हैं tmpl/*

  3. जोड़ने की आवश्यकता है
  4. संपादित अंदर php फ़ाइलें और सभी टैग कि jQuery

  5. लोड हटाने के मॉड्यूल jQuery प्रयोग करने के लिए कदम 1-3 से करते हैं।

  6. अपने टेम्पलेट को संपादित करें, jquery के नवीनतम संस्करण को लोड करने के लिए टैग डालें।

यह अब काम करना चाहिए :)

+0

एचएम - यह काम कर सकता है लेकिन यदि आप कई मॉड्यूल पर इस मॉड्यूल का उपयोग करना चाहते हैं तो क्या होगा। मुझे हर बार यह कदम उठाना है। क्या आप एक और समाधान जानते हैं? –

0

बस एक स्व-प्रेरक फ़ंक्शन में अपने JQ स्क्रिप्ट रैप करने के लिए।

(function($){ 
    $(document).ready(function(){ 

     $('div').click(function(){ alert('ding'); }); 

    }); 
})(jQuery); 

यह एक निजी दायरा बनाता है ताकि आपको किसी भी टकराव के बारे में चिंता न करें। आप jQuery.noConflict() के साथ सभी असहजता को छोड़ सकते हैं; समाधान और आपको उस अद्भुत $ को छोड़ना नहीं है! मैं इसे खरगोश के मामले के रूप में करता हूं जब मुझे पता है कि काम पर कोड के अन्य भाग हैं (उदाहरण के लिए, किसी भी सीएमएस) - भले ही मेरे परीक्षण के बाद कोई नया एक्सटेंशन जोड़ा जाए, तो यह मेरे jQuery को तोड़ना नहीं चाहिए।

jQuery कुकबुक (http://listic.ru/jQuery_Cookbook.pdf - अध्याय 1.17) में एक शानदार अवलोकन है। अगर यह रेसिग के लिए काफी अच्छा है, तो मुझे लगता है कि यह मेरे लिए काम करेगा!

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