Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему приходится подключать jquery.js дважды на странице? (https://javascript.ru/forum/misc/47683-pochemu-prikhoditsya-podklyuchat-jquery-js-dvazhdy-na-stranice.html)

frenzy 03.06.2014 16:06

Почему приходится подключать 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>

подсказки не работают. Почему так, где я косячу?

WorM32 03.06.2014 16:45

Скорее всего переопределяется $.

jsnb 03.06.2014 16:51

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

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

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

})(jQuery)

frenzy 03.06.2014 17:21

Вроде сработало. Спасибо.
А поподробнее про $ можно? Это какая-то особенная ссылка в которую попадает что-то из последнего подгружаемого файла, или как?

jsnb 03.06.2014 17:29

Цитата:

Сообщение от frenzy (Сообщение 314611)
Вроде сработало. Спасибо.
А поподробнее про $ можно? Это какая-то особенная ссылка в которую попадает что-то из последнего подгружаемого файла, или как?

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

frenzy 05.06.2014 21:53

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

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

jsnb 06.06.2014 03:25

Цитата:

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

Насколько я понимаю переменная ms$ будет определена только после инициализации виджета (в момент наступления mswidget.ready), поэтому при попытке доступа из внешнего кода до инициализации будет ошибка.

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

frenzy 06.06.2014 12:21

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

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


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