Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Подключаются две библиотеки jQuery и возникает ошибка. (https://javascript.ru/forum/jquery/34239-podklyuchayutsya-dve-biblioteki-jquery-i-voznikaet-oshibka.html)

hrundel 25.12.2012 20:25

Подключаются две библиотеки jQuery и возникает ошибка.
 
Вложений: 1
Помогите разобраться в проблеме. Я знаю 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 ошибка легко уловимая и её исправить достаточно легко)?

ОлегА 26.12.2012 07:59

а подключать их пробовали в другом порядке?

hrundel 26.12.2012 16:35

Цитата:

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

Сделал :)

js-скрипты для меню я подключил после скриптов для лайтбокса и всё заработало. В чём магия?

ОлегА 27.12.2012 11:00

ну судя по всему, что то ему не хватало, что было в другом скрипте, либо перекрывали может как то другу друга, хз, что угодно может быть)

hrundel 27.12.2012 16:20

Но ведь должна быть какая-то система, чтобы всё работало. Разрешает ли jQuery подключать сразу две своих библиотеки? А если 10 сразу подключить? Есть ли какая-то официальная документация на этот счёт?

Deff 27.12.2012 16:32

hrundel,
Попробуйте вообще убрать этот скрипт
<script type="text/javascript" src="/wp-content/themes/abunker/js/jquery-1.2.6.min.js"></script>

hrundel 30.12.2012 06:32

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

Если я возьму несколько jquery-библиотек и подключу их на странице, то, как я понимаю, ошибка возникнуть не должна. Ведь javascript позволяет переопределить одни и те же функции (переменные) несколько раз. Правильно?

Deff 30.12.2012 11:45

Цитата:

Сообщение от hrundel
Там где нет лайтбокса,

Вы на страницах где нет лайт бокса отключайте только его скрипт, а библиотеку jQuery
http://www.a-bunker.ru/wp-content/pl...k.js?ver=1.0.0
оставляйте на всех страницах

hrundel 30.12.2012 17:27

Deff,
Это понятно. Но обычно на WordPress нельзя регулировать, какие js-скрипты будут подключены. Плагины это делают на своё усмотрение сами и они не знают, подключены ли другие jquery-библиотеки. Поэтому я ищу какое-то универсально решение, не обязательно связанное с моим сайтом.

Deff 30.12.2012 17:38

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


Часовой пояс GMT +3, время: 17:52.