2012-09-11 11 views
5

मेरे पास एक HTML दस्तावेज़ है जहां मैंने मोटीबॉक्स के लिए शीर्षलेख में jQuery संस्करण 1.2.2 का संदर्भ दिया है और मैंने बाद में </body> टैग से पहले jQuery 1.7.1 का संदर्भ दिया है तस्वीर स्लाइड शो।एक ही HTML पृष्ठ में JQuery के दो अलग-अलग संस्करण

समस्या यह है कि मोटीबॉक्स तब तक काम नहीं करेगा जब तक कि jQuery 1.7.1 के संदर्भ को हटाया नहीं जाता है जो स्लाइडशो को काम करने से रोकता है।

मैंने $ संघर्ष के बारे में पता लगाने के लिए चारों ओर गुगल किया है लेकिन सुझाए गए समाधानों में से कोई भी काम नहीं करता है।

सबसे आम मैंने देखा है और करने की कोशिश की थी है: var $j = jQuery.noConflict();

मैं यह कैसे हल कर सकते हैं?

+1

मैं नवीनतम संस्करण के लिए सब कुछ पलायन सुझाव है। –

+0

क्या आप कोड प्रदान कर सकते हैं? –

+0

यह http://stackoverflow.com/questions/528241/how-do-i-run- अलग-versions-of-jquery-on-the-same-page?rq=1 – Alkaline

उत्तर

2

हैं प्लग इन अच्छी तरह से व्यवहार कर रहे हैं, तो यह काम करना चाहिए:

<script src="jquery-1.2.2.js"></script> 
<script src="thickbox.js"></script> 
<script src="jquery-1.7.1.js"></script> 
<script src="slideshow.js"></script> 

(जाहिर है उन स्क्रिप्ट के नाम से बने होते हैं।) Here's an example (source) (मैं jQuery 1.4 इस्तेमाल किया। 2 और jQuery 1.7.1 क्योंकि Google 1.2.2 होस्ट नहीं करता है)।

अच्छी तरह से व्यवहार प्लग इन के साथ ऊपर काम करता है क्योंकि एक अच्छी तरह से व्यवहार प्लग में वैश्विक $ पर बिल्कुल भरोसा नहीं करता, बल्कि jQuery वैश्विक जब यह लोड किया गया था के रूप में के मान का उपयोग करता है और एक बंद में इसे करने के लिए एक संदर्भ पकड़ लेता है, तो का उपयोग करता है स्थानीय संदर्भ प्लग-इन के कोड भर में, इस तरह:

// Example plug-in setup 
(function($) { 
    // ...Plug-in code using `$` here -- note it's a *local* `$`, 
    // not the global `$`, and not the global `jQuery`... 
})(jQuery); 

या

(function() { 
    var $ = jQuery; 

    // ...Plug-in code using `$` here -- note it's a *local* `$`, 
    // not the global `$`, and not the global `jQuery`... 
})(); 

उन दोनों वैश्विकहड़पनेमूल्य जब प्लग-इन लोड किया गया है और फिर अपने स्थानीय उपनाम का उपयोग करें।

प्लग में तैयार घटना के लिए इंतजार करना चाहता है, यह भी कर सकते हैं:

jQuery(function($) { 
    // ...Plug-in code using `$` here -- note it's a *local* `$`, 
    // not the global `$`, and not the global `jQuery`... 
}); 

... jQuery समारोह के लिए तैयार हैंडलर में पारित का उपयोग करता है।

उन तीनों में से कोई भी ऊपर सूचीबद्ध स्क्रिप्ट लोड ऑर्डर के साथ सही ढंग से काम करेगा (jQuery 1.2.2 देखकर मोटीबॉक्स के साथ, और स्लाइडशो jQuery 1.7.1 देख रहा है)।

लेकिन मेरी शुरुआती वाक्य में "अगर" बड़ा "if" है। इस तरह से बुलेट प्रूफ होने के लिए बहुत सारे प्लग-इन नहीं लिखे गए हैं।


ऊपर होते हुए भी, मैं किसी भी प्लग-इन से दूर विस्थापित होता है कि काम करने के लिए आदेश में jQuery 1.2.2 की आवश्यकता है, और जहां भी संभव है (और यह लगभग हमेशा संभव है) दो लोड करने के लिए होने से बचने एक ही पृष्ठ में jQuery सहित किसी भी लाइब्रेरी के विभिन्न संस्करण।

+0

का एक डुप्लिकेट है अधिकांश प्लगइन्स कॉलबैक का उपयोग करते हैं जिसे बाद में निष्पादित किया जाएगा। यदि jQuery के किसी विशिष्ट संस्करण के साथ निर्भरता है, तो इस समय समस्या उत्पन्न नहीं होगी? –

+0

@dystroy: अगर वे ठीक से लिखे गए हैं, नहीं। –

0

मैं jQuery के दो अलग-अलग संस्करणों का उपयोग करने की सलाह नहीं दूंगा। मोटीबॉक्स के कुछ अन्य विकल्प हैं जो नवीनतम jQuery के साथ पूरी तरह से काम करते हैं।

2
<script src="http://code.jquery.com/jquery-1.2.2.min.js"></script> 
<script type="text/javascript"> 
    var jQ122 = jQuery.noConflict(); 
</script> 
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
<script type="text/javascript"> 
    var jQ171 = jQuery.noConflict(); 


    (function($) { 
    $(function() { 
     // here $ is jQuery 1.2.2 
    }); 
    })(jQ122); 


    (function($) { 
    $(function() { 
     // here $ is jQuery 1.7.1 
    }); 
    })(jQ171); 
</script> 
+0

यह काम करेगा। बस सावधान रहें कि जावास्क्रिप्ट पुस्तकालय नाम स्थान को प्रदूषित कर सकते हैं (संकेत: पूरे पुस्तकालय को आपके कोड में दिखाए गए अनुसार (फ़ंक्शन() ...) (JQuery) द्वारा लपेटा जाना चाहिए। इन्हें समर्थन देने के लिए आपको JQuery = jQ171 निर्दिष्ट करना पड़ सकता है। इसके अलावा, टाइप = "टेक्स्ट/जावास्क्रिप्ट" की आवश्यकता नहीं है। सभी ब्राउजर जावास्क्रिप्ट पर डिफ़ॉल्ट रूप से बाहर हैं, जैसा कि उन्हें करना चाहिए। – Alkaline

+0

जब तक पुस्तकालय ओपी का उपयोग नहीं कर रहा है (या ओपी उन्हें ऐसा करने के लिए संपादित करता है), यह नहीं करता मदद नहीं करता है। यह एक पृष्ठ पर jQuery के दो अलग-अलग संस्करणों तक पहुंचने का एक तरीका दिखाता है, लेकिन ... –

0

क्या आप क्या करना चाहते एक बेहद बुरा व्यवहार (आप वास्तव में एक ही संस्करण के लिए सभी कोड माइग्रेट कर लेना चाहिए) है, लेकिन यह सैद्धांतिक रूप से किया जा सकता है ...

आप में परिवर्तन करने की आवश्यकता होगी

<script src="jquery-1.4.js"></script> 
var jQuery14 = jQuery; 
<script src="jquery-1.7.js"></script> 
var jQuery17 = jQuery; 

आप तो बिंदु जहां jQuery प्लगइन को सौंप दिया गया है, जो इस के समान लगेगा पर अपने प्लग इन की कोड बदल जाएगा:

संबंधित प्लगइन्स वैसे भी यद्यपि ... इस कोड पर विचार
(function($){ 
    // all your plugins code would be here 
})(jQuery);  // replace "jQuery" with one of your respective jQuery14/jQuery17 versions/variables 

सलाह दीजिये .. यह कम से कम कहने के लिए बहुत गन्दा है! स्वच्छ कोड लिखें या बाद में भुगतान करें! :)

0

हालांकि आप एक ही समय में jQuery के अलग-अलग संस्करण घोषित करने के लिए jQuery.noConflict(); का उपयोग कर सकते हैं।

मुझे कुछ पुस्तकालयों के साथ आईई 8 के साथ अक्सर कुछ समस्याएं होती हैं जब मैं ऐसा करता हूं।

तो, एक वैकल्पिक समाधान आपके वर्तमान पृष्ठ के भीतर एक पृष्ठ लोड करने के लिए एक आईफ्रेम का उपयोग करना होगा।

एक पृष्ठ पर jQuery का एक दिया संस्करण है, और दूसरा दूसरा।

उदाहरण के लिए:

<iframe frameborder="0" width="700" height ="400" scrolling="no" seamless="seamless" src="your.html"></iframe> 
संबंधित मुद्दे