• Страница 1 из 13
  • 1
  • 2
  • 3
  • 12
  • 13
  • »
Архив - только для чтения
Сообщество uCoz » Архивариус » Архив » jquery.noConflict() (Или почему перестали работать подключаемые плагины.)
jquery.noConflict()
Piterski
Сообщений: 386
Репутация: 195

Сообщение # 1 | 16:16:45
Многие из Вас, кто активно использовал JQuery и дополнительные плагины, после обновления могли столкнуться с проблемой того, что плагины переставали работать, а firebug высвечиваются ошибки (jQuery...is not a funnction();).
Как правило вызвано это конфликтом JQuery того что вы подключаете, и того что подключается системой. (или если у вас есть часть кода, основанная на Prototype).

Но гениальные разработчики jQuery предусмотрели такой вариант, и сделали функцию jQuery.noConflict(), которая возвращает вашу старую функцию $, если вам требуется ваша прежняя функция $.

Как это работает?
Достаточно в теле (после <body>) страницы написать:

Code
<script type="text/javascript">jquery.noConflict();</script>

Или непосредственно перед кодом какой либо функции.

Почему после <body>, возможно спросите вы? Ответ: Потому что порядок подключения скриптов таков, что jQuery юкоз всегда будет подключатся последним, а значит он будет занимать $, и для того чтобы вернуть управление $, Prototype'y, функцию noConflict следует вызывать только, после подключения jQuery uCoz, а значит самым разумным и правильным это сделать после <body> и до всех скриптов в теле.

Важное о Prototype!
В случае когда вы используете Prototype, важно помнить, что раз уж вы передали $ обратно Prototype, то все ваши jQuery функции должны начинаться теперь с jQuery("...").hide();.
Или вы можете назначить свою переменную:

Code
<script type="text/javascript">var $ucoz = jquery.noConflict();</script>

И тогда соответственно - $ucoz("...").hide();


В случае когда вы передаете $ от одного jQuery, другому, писать свою переменную или начинать строки с jQuery, не имеет смысла.

Например у вас есть плагин галереи.

Ваш код.

Code

<html>
     <head>
     <title></title>

     <script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
     <script type="text/javascript" src="js/jquery.galleriffic.js"></script>
     </head>
     <body>
     ...
     <script type="text/javascript">
      $(document).ready(function() {
       var gallery = $('#gallery').galleriffic('#navigation', {
        ...
       }
      }
     </script>
     </body>
     </html>

Достаточно будет перед $(document)..., строкой выше дописать jQuery.noConflict().

Все. enjoy.

P.S

Официальная документация - http://docs.jquery.com/Core/jQuery.noConflict

Еще документация по jQuery предлагает следующий способ:

Code
(function($) {
    // Внутри этого блока $ относится к jQuery
})(jQuery);
weiss
Сообщений: 173
Репутация: 104

Сообщение # 2 | 14:33:01
Из-за использования jQuery.noConflict() не работают нормально аякс-окна (перезагружается страница после сохранения/добавления данных с разными параметрами в адресной строке или просто закрываются окна), а так же при добавлении комментариев перекидывает на xml-файл.

Скрипты плагинов располагаются в head, вызов в body, после jQuery.noConflict() - всё как написано здесь.

Администрация из-за занятости не отвечает, а на сайте вот уже который день нельзя нормально добавить комментарий, а ответить на другой комментарий вообще невозможно. Невозможно редактировать теги и т.д. Получается, что нас фактически ограничили в использовании плагинов или есть еще какой-то выход?

Zippon
Сообщений: 2
Репутация: 3

Сообщение # 3 | 23:12:43
К сожалению такая же беда.
Quote (weiss)
Из-за использования jQuery.noConflict() не работают нормально аякс-окна (перезагружается страница после сохранения/добавления данных с разными параметрами в адресной строке или просто закрываются окна), а так же при добавлении комментариев перекидывает на xml-файл.
D1m0n
Репутация: 15
Уровень замечаний:

Сообщение # 4 | 03:28:25
Piterski, на jQuery который встроенный подвязан какой нибудь функционал системы? Если нет - то удобнее всего было бы его просто отключать.

Еще баг:
если помимо самой библиотеки требуются еще и плагины, то без подключения внешней jquery ничего не работает. Я так понял из-за того, что сама библиотека вызывается позже плагина.
Разумнее было бы сделать подключение jquery сразу после тега <head>


[ Ваш сайт от идеи до реализации ]
Верстка макетов под Ucoz, оптимизация шаблонов, да и много чего еще...
weiss
Сообщений: 173
Репутация: 104

Сообщение # 5 | 20:49:11
Quote (D1m0n)
на jQuery который встроенный подвязан какой нибудь функционал системы?

На u.js работает всё.

Добавлено (19-Апр-2009, 20:49:11)
---------------------------------------------
РЕШЕНИЕ ПРОБЛЕМЫ:

1. Убираем свою библиотеку jQuery, будем пользоваться системной;
2. Перетаскиваем все скрипты (и плагины, и не плагины - всё) из HEAD страницы в BODY;

Никаких jQuery.noConflict() использовать не надо!

Т.е. все свои скрипты просто переносятся под u.js, чтобы библиотека грузилась до обработки скриптов.

D1m0n
Репутация: 15
Уровень замечаний:

Сообщение # 6 | 11:18:21
weiss, так и сделал. Работает smile

[ Ваш сайт от идеи до реализации ]
Верстка макетов под Ucoz, оптимизация шаблонов, да и много чего еще...
core
Сообщений: 4
Репутация: 3

Сообщение # 7 | 16:31:45
А системную библиотеку отключить можно?
D1m0n
Репутация: 15
Уровень замечаний:

Сообщение # 8 | 01:52:59
оказалось нифига не работает. Заработала галерея, но всё, что дальше делается через ява-скрипт не работает. Даж комменты добавляются криво

[ Ваш сайт от идеи до реализации ]
Верстка макетов под Ucoz, оптимизация шаблонов, да и много чего еще...
weiss
Сообщений: 173
Репутация: 104

Сообщение # 9 | 10:20:34
D1m0n, у меня всё нормально, ищите что не так сделали, может где остался jquery.noConflict() еще... В head вообще не должно быть скриптов, если ставите скрипты сразу после body, то надо взять их в $(document).ready(function() {...});.
Piterski
Сообщений: 386
Репутация: 195

Сообщение # 10 | 01:12:14
weiss, Я вас правда забаню, и сменю группу. Вы действительно не понимаете что такое document ready? Когда объектная модель DOM готова к работе. То есть если скрипт не работает с DOM, то нет смысла ставить его в ready. А если даже работает, можно установить скрипт можно сразу после элемента. Безусловно это удобно, например в нем можно вызывать для удобства свои функции, которым необходимо ждать полной загрузки DOM, но надо на нем зацикливаться и уж тем более не надо тут писать как надо делать, вы так говорите что это просто необходимая часть всех скриптов. Может я после <body> поставил скрипт высчитывания рандома, и причем тут DOM и document ready...
Piterski
Сообщений: 386
Репутация: 195

Сообщение # 11 | 01:14:25
По Сабж, способ использовать системную библиотеку конечно известен, однако системная библиотека основана на jQuery версии 1.2.6, которая уже значительно устарела. По этому об этом я даже писать не стал. Пока не было времени разбираться во всем этом, однако, имхо, если на сайте что то серьезно изменяешь, или делаешь сам, то использовать надо все свое. Во всяком случае я так и делаю. Функция добавления комментариев пишется за 10 минут...
weiss
Сообщений: 173
Репутация: 104

Сообщение # 12 | 15:54:43
Quote (Piterski)
Может я после <body> поставил скрипт высчитывания рандома, и причем тут DOM и document ready

А я говорю про скрипт высчитывания рандома? Я про DOM и говорю. Если мы скриптом на jQ обращаемся к элементу, который стоит после самого скрипта, то ничего не произойдет, если не использовать метод ready. Вот вам пример:
http://teatronic.net/123/test1.html - не работает, потому что нет ready
http://teatronic.net/123/test2.html - работает, потому что есть ready
И говорю я это так часто, потому что такую ошибку очень часто допускают и не могут понять почему же не работает.

Добавлено (24-Апр-2009, 15:54:43)
---------------------------------------------

Quote (Piterski)
Функция добавления комментариев пишется за 10 минут...

Не работает не только она...
Сообщение отредактировал weiss - Пятница, 24 Апр 2009, 15:56:58
Piterski
Сообщений: 386
Репутация: 195

Сообщение # 13 | 19:06:36
weiss, Вы абсолютно невнимательный человек, не надо мне объяснять что и как работает.
Quote (weiss)
если ставите скрипты сразу после body, то надо взять их в $(document).ready(function() {...});.

Где вы тут хоть что нибудь упоминали про DOM?
Quote (weiss)
Если мы скриптом на jQ обращаемся к элементу, который стоит после самого скрипта, то ничего не произойдет

Если мы в принципе работаем с JavaScript, а не конкретно с JQ, и объектной моделью документа, до того как она загрузилась то ничего не будет работать.
О этом я кстати и написал:
Quote (Piterski)
А если даже работает, можно установить скрипт можно сразу после элемента.

То есть

Code

<div id="test" style="display:none;">работает!</div>
<script type="text/javascript">
$("#test").css("display","");
</script>

И
Code

<script type="text/javascript">
$(document).ready(function() {$("#test").css("display","");});
</script>
<div id="test" style="display:none;">работает!</div>

Одно и то же, только способ без ready выполнится быстрее.

Quote (weiss)
И говорю я это так часто, потому что такую ошибку очень часто допускают и не могут понять почему же не работает.

То что страница загружается сверху в низ, надо знать как "отче наш". И что тут можно не понять я не понимаю. Нечего лезть в JS значит.

Вы думайте что тут пишите. Своим текстом вы вводите людей в заблуждение.
После фраз

Quote (weiss)
если ставите скрипты сразу после body, то надо взять их в $(document).ready(function() {...});.

Люди все что не попади будут ставить в ready. Будьте внимательным! И кончайте уже со мной спорить!

Piterski
Сообщений: 386
Репутация: 195

Сообщение # 14 | 19:08:27
Quote (weiss)
Не работает не только она...

Все юкозовские функции можно написать "руками" как угодно.
weiss
Сообщений: 173
Репутация: 104

Сообщение # 15 | 19:39:11
Quote (Piterski)
Если мы в принципе работаем с JavaScript, а не конкретно с JQ, и объектной моделью документа, до того как она загрузилась то ничего не будет работать.

Просто тема конкретно про jQ, поэтому js я во внимание не брал. А с помощью jQ мы почти всегда только и делаем, что обращаемся к элементу и совершаем над ним какие-либо операции.
Quote (Piterski)
И кончайте уже со мной спорить!

Ладно, мне уже надоело smile
Сообщество uCoz » Архивариус » Архив » jquery.noConflict() (Или почему перестали работать подключаемые плагины.)
  • Страница 1 из 13
  • 1
  • 2
  • 3
  • 12
  • 13
  • »
Поиск: