Получение TypeError: $ .widget не является функцией Magento 2

9

Я получаю ошибку типа JavaScript в Minicart, странице просмотра товаров и Checkout странице .

TypeError: $.widget is not a function
           $.widget('mage.priceBox')
           $.widget('mage.dataPost')

Как я могу решить это?

Nikul
источник
Вы запускаете команду развертывания?
Ракеш Джесадия,
Да, я запускаю команду развертывания, но все еще получаю ошибку.
Никуль
сначала вы должны удалить содержимое паба / статической папки после того, как запустите команду для развертывания
Ракеш Джесадия,
Привет Ракеш Любая команда, чтобы удалить паб / статическую папку с помощью команды.
Никуль
Вы должны удалить вручную
Ракеш Джесадия

Ответы:

8

У меня была та же проблема с использованием темы Порту. В моем случае иногда jQuery распознавался, иногда нет. К сожалению, я не понял причину, но я нашел решение.

Короче говоря: объединить все файлы JavaScript.

  1. В Backend перейдите по ссылке:

Stores -> Configuration -> Advanced -> Developer -> JavaScript Settings

  1. Активация:

    • Включить связывание JavaScript
    • Объединить файлы JavaScript
    • Сократить файлы JavaScript (необязательно)
  2. Рекомендуется развернуть статические файлы

bin/magento setup:static-content:deploy

  1. Очистить кеш под System -> Cache Management

    • В Additional Cache Managementрегионе выберите кнопкуFlush CSS/Javascript Cache
    • И Flush Magento Cacheпотом

Теперь очистите кэш в браузере и перезагрузите.

Для разработки это решение не является удовлетворительным, но, по крайней мере, для продуктивного, использовать его должно быть хорошим рабочим решением, без непредсказуемого поведения.

Надеюсь, поможет..

проницательность
источник
это помогло мне, спасибо. У меня была такая же проблема
бура
Я только сделал сброс CSS / Javascript и Magento Cache и работал, но ваш ответ может помочь в других случаях! В dev env. мы обязаны оставить оптимизацию JS отключенной, в противном случае отладка становится сложной, а также редко использовать команду deploy, обновление страницы запускает это статическое генерирование файла. Спасибо !
medmek
Я думаю, что это как-то связано с requirejs-config.js ... иногда map: { '*': {используется, а иногда paths: {...
Black
4

У меня тоже была эта проблема, но потом я наткнулся на эту статью: http://www.danjoseph.me/2016/09/16/magento-2-widget-not-function/

В этой статье он объясняет, что jquery загружался второй раз на странице и поэтому перезаписывал версию, загруженную ранее magento. Для меня это был маркетинговый скрипт, который по какой-то причине тоже загружал jquery. Этот тег должен загружаться только один раз в голову этим тегом, а все остальные должны быть удалены.

<script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="jquery" src="http://seatup.local/pub/static/frontend/Seatup/theme/en_US/jquery.js"></script>

Cypher909
источник
-4

Перейдите в папку вашей темы и найдите следующий файл в папке Magento_Theme.

default_head_blocks.xml

и заменить

<script src="jquery.js" />

с

<remove src="jquery.js" />

Обязательно очистите кеш и обновите страницу.

У меня была та же проблема, и я получил ее, используя вышеуказанный метод.

Nausif
источник
Делая это, вы удаляете jQuery. Это правда, что решает ошибку, описанную в вопросе, но теперь другие вещи не работают, например, связанные с начальной загрузкой. Uncaught Error: Bootstrap's JavaScript requires jQuery at bootstrap.min.js:6
Slayerbleast
Удаление jQuery не является правильным способом справиться с этим. Это плохой совет.
Cypher909