Конфликт JQuery с другой библиотекой JQuery

Я использую jquery для модуля. В моем шаблоне joomla есть встроенное меню jquery. Поэтому они конфликтуют друг с другом.

Есть ли способ решить эту проблему. После кода script модуля

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

Ответ 1

Что вам нужно сделать, чтобы исправить вашу проблему, является un-alias функцией jQuery и назначить ее другому имени переменной (помните: переменные могут быть функциями). Вам нужно использовать функцию jQuery.noConflict() для отказа от функции $(). Вот один из них:

// ...after all of Joomla 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 и $, но вы все равно будете иметь другую ссылку на функцию Joomla jQuery, если она вам понадобится. Для повторного итерации основной поток:

  • Загрузка Joomla jQuery
  • Запустить код, зависящий от jQuery для Joomla
  • Переместить Joomla jQuery в другое пространство имен
  • Загрузите jQuery
  • Выполните свой код с помощью $()

Ответ 2

попробуйте

var J = jQuery.noConflict();

после этого используйте J-переменную вместо $или jQuery для вашего настраиваемого кода

Ответ 3

попробуйте

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 здесь.

Ответ 4

Вы имели в виду, что ваш joomla загрузил 2 вида jquery одновременно? 1-е меню загрузки jquery а затем загрузите jQuery вашего модуля?

вот решения: В шаблонах joomla мы можем переопределить представления модулей или компонентов (я полагаю, вы должны использовать joomla 1.5.x правильно?)

  • в ваших шаблонах создайте каталог html/ например: templates/yourTemplate/html/

  • скопируйте файл из модулей /mod _yourMenu/tmpl/.* в свой шаблон html (templates/yourTemplate/html/mod_yourMenu/) → * вам не нужно добавлять tmpl/*

  • отредактируйте файлы php внутри и удалите все  тег, который загружает jquery

  • выполните шаг 1-3 для модулей, которые используют jquery.

  • отредактируйте свой шаблон, поместите тег, чтобы загрузить последнюю версию jquery.

он должен работать сейчас:)

Ответ 5

Просто оберните jq script в функцию самозапускания.

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

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

   });
})(jQuery);

Это создает закрытую область, поэтому вам не нужно беспокоиться о каких-либо столкновениях. Вы можете пропустить всю непростую задачу с помощью jQuery.noConflict(); решение, и вам не нужно отказываться от этого замечательного $! Я делаю это как вопрос, когда я знаю, что есть другие куски кода на работе (например, любые cms) - даже если новое расширение добавлено после моего тестирования, оно не должно прерывать мой jQuery.

Там есть большой обзор в кулинарной книге jQuery (http://listic.ru/jQuery_Cookbook.pdf - глава 1.17). Если это будет достаточно для Resig, я думаю, это сработает для меня!