Подключаются две библиотеки 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 ошибка легко уловимая и её исправить достаточно легко)? |
а подключать их пробовали в другом порядке?
|
Цитата:
js-скрипты для меню я подключил после скриптов для лайтбокса и всё заработало. В чём магия? |
ну судя по всему, что то ему не хватало, что было в другом скрипте, либо перекрывали может как то другу друга, хз, что угодно может быть)
|
Но ведь должна быть какая-то система, чтобы всё работало. Разрешает ли jQuery подключать сразу две своих библиотеки? А если 10 сразу подключить? Есть ли какая-то официальная документация на этот счёт?
|
hrundel,
Попробуйте вообще убрать этот скрипт <script type="text/javascript" src="/wp-content/themes/abunker/js/jquery-1.2.6.min.js"></script> |
Deff,
Так работает нормально на страницах с лайтбоксом. Там где нет лайтбокса, там меню, естественно, отключается, так как никаких jquery библиотек там нет. Если я возьму несколько jquery-библиотек и подключу их на странице, то, как я понимаю, ошибка возникнуть не должна. Ведь javascript позволяет переопределить одни и те же функции (переменные) несколько раз. Правильно? |
Цитата:
http://www.a-bunker.ru/wp-content/pl...k.js?ver=1.0.0 оставляйте на всех страницах |
Deff,
Это понятно. Но обычно на WordPress нельзя регулировать, какие js-скрипты будут подключены. Плагины это делают на своё усмотрение сами и они не знают, подключены ли другие jquery-библиотеки. Поэтому я ищу какое-то универсально решение, не обязательно связанное с моим сайтом. |
hrundel,
Просто выясняйте какая библиотека jQuery подходит под все Ваши используемые /виджеты - плагины/ и подключайте её постоянно, при подгрузке виджетов, - библиотеку исключайте, будет использовацо Ваша общедоступная, хотя есть метода использования двух библиотек одновременно, с заменой в скриптах, использующих одну из библиотек, - символов $ на jQuery. |
Часовой пояс GMT +3, время: 17:52. |