0 Пользователей и 1 Гость просматривают эту тему.
  • 17 Ответов
  • 327 Просмотров
*

CriZtmb

  • Новичок
  • 15
  • 1 / 0
TypeError: $ is not a function [Решено]
« : 20.05.2019, 21:35:55 »
Народ, привет! В общем вот такой вопрос. Нужно мне на одном сайте разместить скрипт. Не так давно понадобилось то же самое и здесь подсказали как быть. В общем решил я и в этот раз скрипт тем же способом подключить. Т.е. сперва создал модуль с этим кодом:
Код
<div data-id_form="1467"></div>
<script type="text/javascript">
var $ = jQuery ;
</script>
<script src="https://forma1.ru/js/uzform.min.js?komp=nok" defer></script>
Вывел его на нужной странице и вроде форма грузится, но не отправляется. На другом сайте с теми же манипуляциями все норм, а здесь при щелчке на кнопку отправить ошибка: TypeError: $ is not a function.
Вот пациент: https://tver-domprestarelyx.ru/uslugi-i-tseny/nezavisimaya-otsenka-kachestva-okazaniya-uslug.html
Там видно в консоли что конфликт в подключаемом скрипте. Можно это как то исправить по легкому или только в самом подключаемом скрипте что менять. Или может отключить какой скрипт на сайте?
« Последнее редактирование: 21.05.2019, 00:03:27 от CriZtmb »
*

Physicist

  • Глобальный модератор
  • 936
  • 187 / 0
  • Рябов Денис
Re: TypeError: $ is not a function
« Ответ #1 : 20.05.2019, 22:08:46 »
Если "модуль" - это именно полноценный модуль, а не Custom HTML, то достаточно добавить в него
Код
<?php JHtml::_('jquery.framework'); ?>
для загрузки jQuery средствами самой Joomla!
*

CriZtmb

  • Новичок
  • 15
  • 1 / 0
Re: TypeError: $ is not a function
« Ответ #2 : 20.05.2019, 22:47:18 »
Не, у меня как раз Custom HTML через расширения - модули -HTML-код.
*

videoruslan

  • Захожу иногда
  • 85
  • 2 / 1
Re: TypeError: $ is not a function
« Ответ #3 : 20.05.2019, 22:49:00 »
Оработка плагинами включена? В модуле
*

sivers

  • Давно я тут
  • 722
  • 75 / 0
Re: TypeError: $ is not a function
« Ответ #4 : 20.05.2019, 22:53:08 »
В общем решил я и в этот раз скрипт тем же способом подключить.
В тот раз решение было для конкретной страницы именно того сайта. А на этом сайте у вас мутулса нет - можно вообще noconflict не подключать. и проблемы с формой тогда не будет.
На связи в телеге @sivers
*

CriZtmb

  • Новичок
  • 15
  • 1 / 0
Re: TypeError: $ is not a function
« Ответ #5 : 20.05.2019, 23:00:33 »
Оработка плагинами включена? В модуле
И так и так пробовал. Не пашет
*

CriZtmb

  • Новичок
  • 15
  • 1 / 0
Re: TypeError: $ is not a function
« Ответ #6 : 20.05.2019, 23:02:34 »
В тот раз решение было для конкретной страницы именно того сайта. А на этом сайте у вас мутулса нет - можно вообще noconflict не подключать. и проблемы с формой тогда не будет.
noconflict я и не прописывал. Там уже стоял подключенный <script src="/media/jui/js/jquery-noconflict.js?475f8800d34d28bd947ddadf5396aa7a" type="text/javascript"></script> в head, также как и на другом сайте где подобная конструкция работает
« Последнее редактирование: 20.05.2019, 23:14:57 от CriZtmb »
*

sivers

  • Давно я тут
  • 722
  • 75 / 0
Re: TypeError: $ is not a function
« Ответ #7 : 20.05.2019, 23:13:24 »
тогда уберите defer из подключения скрипта:
Код
<script src="https://forma1.ru/js/uzform.min.js?komp=nok" defer></script>

а это перед ним оставьте как есть
Код
var $ = jQuery ;
На связи в телеге @sivers
*

CriZtmb

  • Новичок
  • 15
  • 1 / 0
Re: TypeError: $ is not a function
« Ответ #8 : 20.05.2019, 23:22:32 »
Да это я экспериментирую. И без defer не работает. Там странность я писал вот в чем: форма грузится, но не отправляется.
*

sivers

  • Давно я тут
  • 722
  • 75 / 0
Re: TypeError: $ is not a function
« Ответ #9 : 20.05.2019, 23:29:13 »
а потому что где-то после ее загрузки отрабатывает noconflict и отключает $, который используется формой.
На связи в телеге @sivers
*

CriZtmb

  • Новичок
  • 15
  • 1 / 0
Re: TypeError: $ is not a function
« Ответ #10 : 21.05.2019, 00:00:31 »
В общем решил проблемку. В модуле добавил
Код
<script type="text/javascript">
$ = jQuery.noConflict(true);
</script>
и все заработало
*

Physicist

  • Глобальный модератор
  • 936
  • 187 / 0
  • Рябов Денис
Re: TypeError: $ is not a function [Решено]
« Ответ #11 : 21.05.2019, 07:14:05 »
Если честно, то как-то странно, что $=jQuery не работало, а $=jQuery.noConflict(true) заработало. Переменная jQuery должна быть либо объявлена (и тогда работают оба способа), либо нет (и тогда ни один из них не работает, просто текст ошибки будет другой).
*

CriZtmb

  • Новичок
  • 15
  • 1 / 0
Re: TypeError: $ is not a function [Решено]
« Ответ #12 : 21.05.2019, 09:51:51 »
Да я тоже удивлен. Но главное работает как надо, все отправляется. Мне нормально
*

sivers

  • Давно я тут
  • 722
  • 75 / 0
Re: TypeError: $ is not a function [Решено]
« Ответ #13 : 21.05.2019, 09:59:43 »
Если честно, то как-то странно
там глупость допущена в самом скрипте uzform, который подключается с внешнего ресурса. В нем в самом начале наличие jQuery на странице определяется по доступности объекта jQuery, а дальнейшее обращение к объекту идет через $. Но после отработки noConflict jQuery есть, а $ нет. Дальше автор начинает костылить повторное объявление $ вручную, но из-за разного времени срабатывания скриптов у него вылазят все эти неприятные лаги.
На связи в телеге @sivers
*

CriZtmb

  • Новичок
  • 15
  • 1 / 0
Re: TypeError: $ is not a function [Решено]
« Ответ #14 : 21.05.2019, 11:07:42 »
Дальше автор начинает костылить повторное объявление $ вручную, но из-за разного времени срабатывания скриптов у него вылазят все эти неприятные лаги.
Ну мне главное чтоб заработало: костыли, не костыли - не столь принципиально. Скрипт uzform править возможности нет: им занимаются сторонние разработчики. Да и делают они все тааааак медленно: месяц пройдет прежде чем что-то поправят, а форма, подгружаемая скриптом должна работать сразу после установки. Вот и приходится костылить


*

sivers

  • Давно я тут
  • 722
  • 75 / 0
Re: TypeError: $ is not a function [Решено]
« Ответ #15 : 21.05.2019, 11:11:56 »
Ну мне главное чтоб заработало
Пожалуй, было б надежней выпилить noConflict со страницы. Это можно попробовать сделать в индексе шаблона (или в плагине) командой
unset($this->_scripts['/media/jui/js/jquery-noconflict.js']);
ПОСЛЕ подключения жумлавого jquery
На связи в телеге @sivers
*

CriZtmb

  • Новичок
  • 15
  • 1 / 0
Re: TypeError: $ is not a function [Решено]
« Ответ #16 : 21.05.2019, 11:18:48 »
Попробую сегодня вечерком.
*

AlekVolsk

  • Гуру
  • 6821
  • 396 / 4
Re: TypeError: $ is not a function [Решено]
« Ответ #17 : 21.05.2019, 11:36:27 »
Пожалуй, было б надежней выпилить noConflict со страницы. Это можно попробовать сделать в индексе шаблона (или в плагине) командой
unset($this->_scripts['/media/jui/js/jquery-noconflict.js']);
ПОСЛЕ подключения жумлавого jquery
для этого достаточно грамотно подключить сам jq:
Код: php
<?php Joomla\CMS\HTML\HTMLHelper::_('jquery.framework', false, null, false); ?>
первое false как раз отключает noconflict, второе (последнее) false отключает jquery-migrate
« Последнее редактирование: 21.05.2019, 11:41:57 от AlekVolsk »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Пункт меню не видимый для гостей

Автор dron

Ответов: 3
Просмотров: 79
Последний ответ Сегодня в 10:29:03
от dron
[Решено] Не могу зайти в панель управления

Автор scenann

Ответов: 11
Просмотров: 189
Последний ответ Сегодня в 09:42:50
от scenann
[Решено] Синтаксис в коде if else

Автор lgmax

Ответов: 4
Просмотров: 120
Последний ответ 16.08.2019, 12:04:18
от lgmax
[Решено] Ошибка в коде

Автор lgmax

Ответов: 2
Просмотров: 112
Последний ответ 16.08.2019, 10:46:57
от lgmax
[Решено] Проблема после удачной регистрации!

Автор Mizar066

Ответов: 11
Просмотров: 21597
Последний ответ 09.08.2019, 15:01:28
от Webster