Я использую 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, я думаю, это сработает для меня!