Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.06.2014, 16:06
Интересующийся
Отправить личное сообщение для frenzy Посмотреть профиль Найти все сообщения от frenzy
 
Регистрация: 07.03.2013
Сообщений: 25

Почему приходится подключать jquery.js дважды на странице?
Есть страница:
http://netmarkt.ru/shop/planshety/ap...wi-fi-cellular

В head подгружается:
<script src="http://netmarkt.ru/components/com_jshopping/js/jquery/jquery-1.6.2.min.js" type="text/javascript"></script>


Далее ниже подключается:
<script type="text/javascript" src="http://netmarkt.ru/templates/blank_joomla_template/js/jquery.qtip.min.js"></script>

Она нужна только для вывода подсказки на странице с товаром.
Проблема в том, что если повторно не подключить перед ней
<script src="http://netmarkt.ru/components/com_jshopping/js/jquery/jquery-1.6.2.min.js" type="text/javascript"></script>

подсказки не работают. Почему так, где я косячу?
Ответить с цитированием
  #2 (permalink)  
Старый 03.06.2014, 16:45
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

Скорее всего переопределяется $.
Ответить с цитированием
  #3 (permalink)  
Старый 03.06.2014, 16:51
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Ниже скрипт использует $ для доступа к jQuery, хотя на тот момент $ уже не является ссылкой на jQuery.
1) Убрать второе подключение jQuery перед jquery.qtip.min.js
2) Код блока script, того где содержится строки
$(document).ready(function() {
	$('#guarBadge').qtip({

обернуть так:
(function($){

//тут вставить код того скрипта

})(jQuery)
Ответить с цитированием
  #4 (permalink)  
Старый 03.06.2014, 17:21
Интересующийся
Отправить личное сообщение для frenzy Посмотреть профиль Найти все сообщения от frenzy
 
Регистрация: 07.03.2013
Сообщений: 25

Вроде сработало. Спасибо.
А поподробнее про $ можно? Это какая-то особенная ссылка в которую попадает что-то из последнего подгружаемого файла, или как?
Ответить с цитированием
  #5 (permalink)  
Старый 03.06.2014, 17:29
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от frenzy Посмотреть сообщение
Вроде сработало. Спасибо.
А поподробнее про $ можно? Это какая-то особенная ссылка в которую попадает что-то из последнего подгружаемого файла, или как?
По умолчанию при подключении JQ оно инициализирует 2 переменные в глобальной области - $ и jQuery, которые используются для доступа к функциям JQ. У вас после подключения JQ используется jQuery.noConflict(); (файл jquery-noconflict.js) С помощью этого метода переменная $ отвязывается от JQ чтобы не конфликтовать с другими библиотеками. Поэтому доступ к функция JQ после использования noConflict осуществляется только через переменную jQuery, а не $. А та обертка вокруг кода создает внутри анонимной функции локальную переменную $, которая ссылается на jQuery, поэтому внутри функции код может использовать $ как обычно. Хотя можно было просто заменить
$(document).ready(function()
на
jQuery(document).ready(function($)
чтобы получить аналогичный результат.

Последний раз редактировалось jsnb, 03.06.2014 в 17:37.
Ответить с цитированием
  #6 (permalink)  
Старый 05.06.2014, 21:53
Интересующийся
Отправить личное сообщение для frenzy Посмотреть профиль Найти все сообщения от frenzy
 
Регистрация: 07.03.2013
Сообщений: 25

Тээк, у меня возникла похожая проблема. Вот страница:
http://netmarkt.ru/check.php - она работает (при клике "Доставка Multiship" появляется виджет)
А вот другая страница и она не работает:
http://netmarkt.ru/check2.php

В документации сказано, что "Обратите внимание, что jQuery вызывается через переменную ms$ . Это экземпляр jQuery версии 1.9.1, всегда доступный в этой переменной, если на странице есть код корзинного виджета." Но даже если во втором варианте поставить код после html - он работать не будет, пока не уберешь ms$(document).ready(
Ответить с цитированием
  #7 (permalink)  
Старый 06.06.2014, 03:25
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от frenzy Посмотреть сообщение
В документации сказано, что "Обратите внимание, что jQuery вызывается через переменную ms$ . Это экземпляр jQuery версии 1.9.1, всегда доступный в этой переменной, если на странице есть код корзинного виджета." Но даже если во втором варианте поставить код после html - он работать не будет, пока не уберешь ms$(document).ready(
Насколько я понимаю переменная ms$ будет определена только после инициализации виджета (в момент наступления mswidget.ready), поэтому при попытке доступа из внешнего кода до инициализации будет ошибка.

P.S. На второй странице проблемы с кодировкой.

Последний раз редактировалось jsnb, 06.06.2014 в 03:31.
Ответить с цитированием
  #8 (permalink)  
Старый 06.06.2014, 12:21
Интересующийся
Отправить личное сообщение для frenzy Посмотреть профиль Найти все сообщения от frenzy
 
Регистрация: 07.03.2013
Сообщений: 25

Переделал в
mswidget.ready(function(){
	ms$(document).ready(
		mswidget.initCartWidget({

Заработало, спасибо. Правда по привычке поставил ; после круглой скобки, так еще косяк в синтаксисе был. Это быстро попогло выявить косяк:
http://blog.slonoed.net/2011/10/javascript-notepad.html
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция не позволяет остаться элементу на странице. Почему? jsuse Общие вопросы Javascript 9 10.11.2011 10:49