Перейти к содержимому


Скрипты Jquery Конфликт

скрипт jquery

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 ke1evra

ke1evra

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 86 сообщений

Отправлено 09 Ноябрь 2013 - 13:17

Суть проблемы: не работают вместе скрипты Storeland и Bootstrap, а именно скрипты, использующие библиотеки:
<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
<script type="text/javascript" src="{FORALL_JS_PATH}jquery-1.4.2_nyroModal-1.6.2_validate_capslock_jquery-ui-1.8.4.custom.version2.min.js"></script>

Если убрать верхнюю строчку, то перестанет работать например кнопка (JS код в файле bootstrap.js)
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<span class="glyphicon glyphicon-user"></span> Личный кабинет <b class="caret"></b>
</a>

А если нижнюю, то перестают работать все скрипты Storeland'а, например не будет работать вот эта кнопка:
// Кнопка добавления товара на сравнение сравнения товаров
$('.goodsDataCompareButton').click(function(){
window.location.href = $(this).attr('rel') +
($(this).attr('rel').indexOf( '\?' ) > -1 ? '&' : '?') +
'id='+
$('.goodsDataMainModificationId').val()+
'&from='+
$('input[name="form[goods_from]"]').val();
return false;
});

Если оставить обе библиотеки, будут работать та, которая объявлена ниже + сообщение об ошибке JS.

Полагаю что эти ошибки имеют место быть из-за разных версий jQuery (1.4.1 у Storeland и 1.10.2 у Bootstrap)

Прошу помощи, так как попытки разобраться самостоятельно ни к чему не привели :(

Еще странный баг:
Если подключать jQuery таким кодом, то все работает
<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
А если так, то нет (файлы идентичны)
<script type="text/javascript" src="{ASSETS_JS_PATH}jquery.js"></script>


#2 ke1evra

ke1evra

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 86 сообщений

Отправлено 11 Ноябрь 2013 - 20:39

UP
Нашел такое решение проблемы:
// подключаем последнюю версию jQuery
// подключаем jQuery 1.6
var $jq16 = jQuery.noConflict(); // сохраняем ссылку
// подключаем jQuery 1.4
var $jq14 = jQuery.noConflict(); // сохраняем ссылку
;(function($) {
// старый плагин, который использует jQuery 1.4
}($jq14));
;(function($) {
// чуть новее, использует jQuery 1.6
}($jq16));
;(function($) {
// используем последнюю версию jQuery
}(jQuery));
http://habrahabr.ru/qa/29529/
Помогите плз прикрутить :unsure:

#3 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 13 Ноябрь 2013 - 03:59

Не могли бы вы объяснить необходимость подключения другой версии jquery? В чем возникает зависимость от подключаемой версии? В большинстве случаев нет необходимости подключать другую версию jquery.

#4 ke1evra

ke1evra

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 86 сообщений

Отправлено 17 Ноябрь 2013 - 11:12

Просмотр сообщенияVaccina (13 Ноябрь 2013 - 03:59) писал:

Не могли бы вы объяснить необходимость подключения другой версии jquery? В чем возникает зависимость от подключаемой версии? В большинстве случаев нет необходимости подключать другую версию jquery.
Поясняю: необходимость подключения другой версии jQuery обусловлена желанием использовать возможности фреймворка Bootstrap наряду с имеющимся функционалом Storeland.

От вышеупомянутого фреймворка я использую следующие модули:
  • tooltip (всплывающие подсказки)
  • popover (подсказки по клику)
  • collapse (свертывание и развертывание контента по клику)
  • carousel (слайдер)
  • affix (фиксированое меню)
А от Storeland мне необходимы:
  • сравнение товаров и, в частности, кнопка добавления товаров к сравнению
  • добавление в корзину через Ajax
  • отзывы
  • и тд
Так или иначе проблема была решена следующим образом:
В шаблоне HTML:
<!-- Объявляем склееную библиотеку из множества js файлов, в том числе jQuery 1.4.2 -->
<script type="text/javascript" src="{FORALL_JS_PATH}jquery-1.4.2_nyroModal-1.6.2_validate_capslock_jquery-ui-1.8.4.custom.version2.min.js"></script>
<!-- Объявляем функцию высвобождения идентификатра $ -->
<script> $142 = jQuery.noConflict();</script>
<!-- Объявляем последнюю версию jQuery, на данный момент 1.10.2 -->
<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>

Далее, в файле main.js (который работает через 1.4.2) через Find -> Replace заменяем идентификаторы $ на $142, например так:
// Кнопка добавления товара на сравнение сравнения товаров
$142('.goodsDataCompareButton').click(function(){
window.location.href = $142(this).attr('rel') +
($142(this).attr('rel').indexOf( '\?' ) > -1 ? '&' : '?') +
'id='+
$142('.goodsDataMainModificationId').val()+
'&from='+
$142('input[name="form[goods_from]"]').val();
return false;
});

Profit:
  • весь вышеупомянутый функционал работает одновременно
  • сообщение об ошибке JavaScript исчезло


#5 kcgmss

kcgmss

    Новичок

  • Пользователи
  • Pip
  • 1 сообщений

Отправлено 30 Июль 2016 - 11:30

Вот же всё расписано jquery.com.ru





Темы с аналогичным тегами скрипт, jquery

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных