في بعض الأحيان نلجأ لإستخدام أكثر من مكتبة جافاسكريبت في صفحة واحدة لتشغيل اكثر من تطبيق مختلف .. مثل إستخدام jQuery مع Mootools او jQuery مع prototype … في الغالب يؤدي هذا إلى توقف احد التطبيقات عن العمل بسبب حدوث تعارض بين المكتبات المُستخدمة .. هنا ساعرض بعض الطرق للتغلب على التعارض بين jQuery و المكتبات الأخرى ..
لنفرض أن لدينا هذا الكود و عند إستخدامه يحدث التعارض إما بتوقف عمل هذا الكود او توقف تطبيقات اخرى في الصفحة عن العمل :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $(document).ready(function(){ m=document.getElementById('buttons'); sa=m.getElementsByTagName('a'); $("a").click(function(){ $(this).blur(); }); $(sa).mouseover(function(){ $(this).stop().animate({height:'50px'},{queue:false, duration:1200, easing: 'easeOutBounce'}) }); $(sa).mouseout(function(){ $(this).stop().animate({height:'20px'},{queue:false, duration:900, easing: 'easeOutBounce'}) }); }); |
سنحاول الأن حل هذا التعارض باستخدام jQuery.noConflict وهناك طريقتان لإستخدامها ..
الطريقة الأولى : سنقوم أولا بإستدعاء الدالة بكتابتها بالشكل التالي jQuery.noConflict(); بعد ذلك في الدوال سنقوم بإستبدال $ بـ jQuery مع وضع $ داخل قوسي function .. هذا سيتيح لنا إستخدام $ داخل الدالة بدون مشاكل … أتوقع أنك لم تفهم شئ
…. حسناً شاهد الكود التالي و لاحظ التغيير في السطرين الأول و الثاني
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | jQuery.noConflict(); jQuery(document).ready(function($){ m=document.getElementById('buttons'); sa=m.getElementsByTagName('a'); $("a").click(function(){ $(this).blur(); }); $(sa).mouseover(function(){ $(this).stop().animate({height:'50px'},{queue:false, duration:1200, easing: 'easeOutBounce'}) }); $(sa).mouseout(function(){ $(this).stop().animate({height:'20px'},{queue:false, duration:900, easing: 'easeOutBounce'}) }); }); |
الطريقة الثانية : سنقوم بإسناد jQuery.noConflict إلى متغير معين وليكن $j ثم نستخدم $j بدلاً من $ في التطبيق .. شاهد المثال ولاحظ السطر الأول وكيف تم إستبدال $ في باقي الكود بـ $j
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var $j = jQuery.noConflict(); $j(document).ready(function(){ m=document.getElementById('buttons'); sa=m.getElementsByTagName('a'); $j("a").click(function(){ $j(this).blur(); }); $j(sa).mouseover(function(){ $j(this).stop().animate({height:'50px'},{queue:false, duration:1200, easing: 'easeOutBounce'}) }); $j(sa).mouseout(function(){ $j(this).stop().animate({height:'20px'},{queue:false, duration:900, easing: 'easeOutBounce'}) }); }); |
هناك طريقة أخرى لا تعتمد على jQuery.noConflict عن طريق إستبدال $ بـ jQuery ولكنها تتطلب إستدعاء مكتبة jQuery قبل المكتبات الأخرى كما أنها لا تعمل بشكل سليم في كثير من الأحيان ….. ( على الأقل من واقع تجربتي ^_^ )
راجع ايضاً .. Using jQuery with Other Libraries
- أدعو لي و لوالدي بدعوة صالحة و أن يجمعنا الله في الجنة .
- ساهم في نشر المدونة .. أخبر عنها أصدقائك .. ضع رابط لها في مدونتك أو في إحدى تويتراتك ^_^
- لا أمانع في نقل بعض التدوينات و لكن وفق رخصة الاستخدام
الوسوم: javascript, jQuery, jQuery.noConflict, mootools, prototype, جافاسكريبت








فؤاد بدوي شاب مصري ، طالب جامعي بكلية العلوم تخصص رياضيات وعلوم الحاسب ... مصمم مواقع حر Freelancer web designer.. أجيد Photoshop , Xhtml , CSS و لذلك ستجد ان هذه المدونة تتناول بشكل رئيسي تصميم و تطوير المواقع و المجتمعات الالكترونية و بعض المصادر التي تفيد المصممين و المطورين ..
السلام عليكم ورحمة الله وبركاته..
تدينة قيمة منك أخي الكريم المعاصر، فمثل هذه المواضيع خصوصا عن المكتبتات الشهيرة ك jQuery ليست متوفرة عربيا إلا بشكل نادر يقترب من العدم..
لكن لي استفسار أخي: أحيانا أستخدم أكثر من إضافة ب jQuery مع ووردبريس، والمفروض أن نجلب مكتبة jQuery في سطر واحد وتكون أحدث نسخة وتشتغل الإضافات كلها، لكن يحدث أنها لا تشتغل إلا إذا استدعيت لكل واحد منها نسخة المكتبة jQuery الخاصة بها كما وردت في الشرح مثلا، وهو ما لم أستوعبه..
حبذا لو تخصص تدوينة عن طرق استخدام jQuery مع ووردبريس وأكون شاكرا لك..
موفق ومني لك أرق تحية..
أهلا بك اخ عبد الهادي ..
لا أعرف هل هناك تطيبقات تعمل مع اصدارت معينة من jQuery ولا تعمل مع اخرى .. هل لي بـأسماء بعض الاضافات التي تحدثت عنها
موفق
[...] أو إذا أردتم استخدام الملف من Google Code كما تم التوضيح بمقال كيفية عمل قائمة منسدلة باستخدام Ext Core يمكن كذلك إضافة jQuery للموقع بنفس الطريقة عن طريق إضافة الكود السابق في ملف header.php قبل وسم < body > : 1 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script> يمكن الاستفادة من مقال الأخ فؤاد بدوي عن حل مشكلة تعارض jQuery مع المكتبات الأخرى [...]
أهلا بك أخي فؤاد مجددا، وعذرا على التأخير..
أولا مبارك الشهر الكريم وكل عام وأنت إلى الله أقرب إن شاء الله..
الإضافات التي استخدمتها أخي هي التالية:
http://buildinternet.com/2009/03/sliding-boxes-and-captions-with-jquery/
http://net.tutsplus.com/tutorials/javascript-ajax/create-a-tabbed-interface-using-jquery/
فحينما أتابع الشرح أجد صاحب الإضافة يطلب تحميل آخر نسخة من مكتبة jQuery، ومنطقيا من وجهة نظري يجب أن تعمل كلا الإضافتين حينما نستدعي آخر نسخة من المكتبة لمرة واحدة، والمفروض أن تعمل من خلال استدعائنا لمكتبة jQuery المدمجة مع وورد بريس من غير مشاكل، لكن هذا لم يحصل معي فاضطررت لاستدعاء المكتبة في نسختين مختلفتين، فلربما تكون ملاحظتك تلك صحيحة..
أنتظر توضيحك يا غالي مع شكري العميق لك..
مني لك أرق تحية..
فعلا الجى كيرى ممتازة دائما
وانا كنت شفتلها كام درس هنا
http://www.jooria.com/
جميل جداً كانت تواجهني نفس المشكله وحليتها بطريقه تقريباً نفس هذه الطريقة
شكراً لك على نشر العلم اخوي فؤاد
الله يوفقك
لازلت أطمع في الرد لو أمكن، أو على الأقل إخباري في حالة تعذر الرد لضيق الوقت حتى لا أظل رهينا لهذه التدوينة..
شكرا مجددا ومني لك أرق تحية..
اهلا بك عزيزي .. و اعتذر عن التأخر في الرد للإنشغال
سأحاول في أقرب فرصة تجربة الإضافات إن شاء الله
شكرا لك أخي فؤاد على الاهتمام، وأرجو لك التوفيق في أعمالك، وإن كان هناك حل نهائي فسيكون جميلا لو تم نشرته في تدوينة منفصلة للفائدة، وأنا أتحدث تحديدا عن استعمال أكثر من إضافة jQuery في قالب وورد بريس..
موفق ومني لك أرق تحية..
يزاك الله خير يا المعاصر

واجهتني هذه المشكلة في أحد التصاميم على الوورد بريس .. فلم أعرف ما هو الحل بسبب عدم تعمقي في jQuery .. فكان الحل أني اكتفيت باستخدام تطبيق واحد و ألغيت الثاني
لكن الآن وجدنا الحل و سوف نطبقه في الأعمال القادمة.
شكراً لك و يعطيك العافية
لا اعرف كيف اقوم بشكرك لكن لدي مشكله أنا استخدم بعض خصائص الجاي كيوري وعندما استخدم اضافة Lightbox 2 لا تعمل تلك الخصائص مالعمل؟
اضافة Lightbox 2 تعتمد على مكتبة Prototype … و بالتالي يحدث تعارض بينها وبين jQuery >> هل جربت الحل بالأعلى لحل هذا التعارض ؟
نعم عزيزي جربته أو بالأحرى أني جربته وكانت طريقتي خاطئه لكني قضيت ٣ أسابيع أحل المشكلة ولم أتمكن من ذلك
أنا آسف جداً أزعجتك بمشكلتي
هل جربت طريقة الحل بطريقة صحيحة .. أرجو أن تجرب الطريقتان بالأعلى و أبقيني على إطلاع
موفق
جزاك الله كل خير أخي فؤاد .
للأسف لا فائدة .. سأراجع معك ماقمت بعمله فتحت ملف jquery.js وحاولت تطبيق شرحك ولكن تأثيرات الجاي كيوري لا تعمل مع إضافة lightbox هل ماقمت به كان صحيح؟
يالله لا أعرف كيف أقوم بشكرك لإهتمامك لأمري
أهلا بك عزيزي ..
الطريقة بالأعلى لا تطبق على ملف jquery.js .. بل تطبق على التطبيق نفسه .. راجع المثال في هذه التدوينة
لو فرضنا أن تستخدم تطبيق قوائم منزلقة و بسبب إستخدام lightbox فإنها لا تعمل .. إذن عليك تطبيق الطريقة بالأعلى على أكواد القائمة المنزلقة و ليس على اكواد المكتبه نفسها
ولكن ماذا عن tooltip(); لا استطيع ان اقوم بتشغيله مع اضافات ورد بريس جاي كيوري اخرى !
[...] و أي تطبيق أخر يستخدم مكتبة أخرى غير jQuery .. فراجع هذه التدوينة أو قم بتحرير ملف animated-menu.js و إستبدل محتوياته بالتالي : [...]