Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.12.2012, 20:25
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Подключаются две библиотеки jQuery и возникает ошибка.
Помогите разобраться в проблеме. Я знаю JavaScript на очень простом уровне.

На странице http://www.a-bunker.ru/gallery/simple-gallery/ есть всплывающий лайтбокс с изображениями, сделанный с помощью плагина “rps-image-gallery” (сайт на WordPress, если кому-то интересно). Лайтбокс работает с помощью скриптов
http://www.a-bunker.ru/wp-content/pl...k.js?ver=1.0.0 и
http://www.a-bunker.ru/wp-content/pl...k.js?ver=1.0.0

На этой же странице у меня есть горизонтальное выпадающее меню на javascript. Оно сделано так, что работает и с выключенным JavaScript и с включенным (На http://a-bunker.ru оно работает как надо). Это меню использует скрипты http://www.a-bunker.ru/wp-content/th...y-1.2.6.min.js и
http://www.a-bunker.ru/wp-content/th...s/superfish.js (они подключаются внутри тега <head>). Так вот это меню на это странице не работает.

И меню и лайтбокс используют одну и ту же библиотеку jQuery. Я полагаю, конфликт в двух одновременно подключаемых экземплярах библиотеки jQuery. Когда я убираю экземпляр библиотеки для лайтбокса (внизу страницы), он перестаёт работать, а меню начинает. Во всех браузерах ситуация одна и та же.

Я смотрел в консоли ошибок FF и Chrome когда все js-скрипты подключены и там такая ошибка (в FF она имеет такой вид):
TypeError: jQuery(...).superfish is not a function
jQuery('ul.top-menu').superfish();

Когда же библиотека jQuery для лайтбокса отключена, то эта ошибка исчезает, и появляется новая, скриншот которой можно увидеть во вложении к моему посту.
-- На скриншоте написано Uncaught TypeError: Cannot read property 'opacity' of indefined ---

Моё предположение: используются две разных версии jQuery, поэтому лайтбокс не может работать, когда я отключаю его «родную» js-библиотеку jQuery.

Поясните, пожалуйста могут ли работать две jQuery библиотеки для двух разных эффектов сайта вместе? Если могут, то как избежать подобных проблем как у меня? Что я должен изменить в коде меню, чтобы всё заработало (я полагаю, что в скрипте common.js ошибка легко уловимая и её исправить достаточно легко)?
Изображения:
Тип файла: jpg jq.jpg (22.4 Кб, 8 просмотров)

Последний раз редактировалось hrundel, 25.12.2012 в 20:30. Причина: Скриншот маленький, добавил текст ошибки на нём
Ответить с цитированием
  #2 (permalink)  
Старый 26.12.2012, 07:59
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

а подключать их пробовали в другом порядке?
Ответить с цитированием
  #3 (permalink)  
Старый 26.12.2012, 16:35
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Сообщение от ОлегА Посмотреть сообщение
а подключать их пробовали в другом порядке?
Сделал

js-скрипты для меню я подключил после скриптов для лайтбокса и всё заработало. В чём магия?
Ответить с цитированием
  #4 (permalink)  
Старый 27.12.2012, 11:00
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

ну судя по всему, что то ему не хватало, что было в другом скрипте, либо перекрывали может как то другу друга, хз, что угодно может быть)
Ответить с цитированием
  #5 (permalink)  
Старый 27.12.2012, 16:20
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Но ведь должна быть какая-то система, чтобы всё работало. Разрешает ли jQuery подключать сразу две своих библиотеки? А если 10 сразу подключить? Есть ли какая-то официальная документация на этот счёт?
Ответить с цитированием
  #6 (permalink)  
Старый 27.12.2012, 16:32
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

hrundel,
Попробуйте вообще убрать этот скрипт
<script type="text/javascript" src="/wp-content/themes/abunker/js/jquery-1.2.6.min.js"></script>
Ответить с цитированием
  #7 (permalink)  
Старый 30.12.2012, 06:32
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Deff,
Так работает нормально на страницах с лайтбоксом. Там где нет лайтбокса, там меню, естественно, отключается, так как никаких jquery библиотек там нет.

Если я возьму несколько jquery-библиотек и подключу их на странице, то, как я понимаю, ошибка возникнуть не должна. Ведь javascript позволяет переопределить одни и те же функции (переменные) несколько раз. Правильно?
Ответить с цитированием
  #8 (permalink)  
Старый 30.12.2012, 11:45
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от hrundel
Там где нет лайтбокса,
Вы на страницах где нет лайт бокса отключайте только его скрипт, а библиотеку jQuery
http://www.a-bunker.ru/wp-content/pl...k.js?ver=1.0.0
оставляйте на всех страницах
Ответить с цитированием
  #9 (permalink)  
Старый 30.12.2012, 17:27
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Deff,
Это понятно. Но обычно на WordPress нельзя регулировать, какие js-скрипты будут подключены. Плагины это делают на своё усмотрение сами и они не знают, подключены ли другие jquery-библиотеки. Поэтому я ищу какое-то универсально решение, не обязательно связанное с моим сайтом.
Ответить с цитированием
  #10 (permalink)  
Старый 30.12.2012, 17:38
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

hrundel,
Просто выясняйте какая библиотека jQuery подходит под все Ваши используемые /виджеты - плагины/ и подключайте её постоянно, при подгрузке виджетов, - библиотеку исключайте, будет использовацо Ваша общедоступная, хотя есть метода использования двух библиотек одновременно, с заменой в скриптах, использующих одну из библиотек, - символов $ на jQuery.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не выходит добраться до элемента в iframe, возникает ошибка Tander Events/DOM/Window 4 12.10.2013 23:02
На странице подключатся несколько библиотек jQuery и вылазит ошибка hrundel Общие вопросы Javascript 0 22.12.2012 16:50
как подключить две версии библиотеки jquey одновременно abuGabi jQuery 6 05.11.2011 07:45
Необходимы советы как убирать не нужное из библиотеки jquery. dr_gluk jQuery 13 18.07.2011 12:05
Ошибка в jQuery 1.5.1. Не понимаю в чем проблема? viatcheslav AJAX и COMET 0 16.05.2011 11:38