Obtenir TypeError: $ .widget n'est pas une fonction Magento 2

9

Je reçois une erreur de type JavaScript dans Minicart, la page d'affichage du produit et la page de paiement .

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

Comment puis-je resoudre ceci?

Nikul
la source
Avez-vous exécuté la commande deploy?
Rakesh Jesadiya
Oui, je lance la commande de déploiement, mais j'obtiens toujours une erreur.
Nikul
vous devez d'abord supprimer le contenu du dossier pub / statique après avoir exécuté la commande de déploiement
Rakesh Jesadiya
Salut Rakesh N'importe quelle commande pour supprimer le dossier pub / statique à l'aide de la commande.
Nikul
vous devez supprimer manuellement
Rakesh Jesadiya

Réponses:

8

J'ai eu le même problème avec Porto Theme. Dans mon cas, jQuery a parfois été reconnu, parfois non. Malheureusement, je n'ai pas compris la cause, mais j'ai trouvé une solution.

En bref: fusionnez tous les fichiers javascript.

  1. Dans Backend, allez à:

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

  1. Activer:

    • Activer le regroupement JavaScript
    • Fusionner des fichiers JavaScript
    • Réduire les fichiers JavaScript (facultatif)
  2. Non recommandé pour déployer les fichiers statiques

bin/magento setup:static-content:deploy

  1. Vider le cache sous System -> Cache Management

    • Dans la Additional Cache Managementrégion, choisissez le boutonFlush CSS/Javascript Cache
    • Et Flush Magento Cacheaprès

Désactivez maintenant le cache dans le navigateur et rechargez.

Pour développer cette solution n'est pas satisfaisante, mais au moins pour une utilisation productive, elle doit être une bonne solution de travail, sans comportement imprévisible.

J'espère que cela aide..

sagacité
la source
cela m'a aidé, merci. J'ai eu le même problème
Bourax
Je n'ai fait que vider le cache CSS / Javascript et Magento, et j'ai travaillé, mais votre réponse peut aider d'autres cas! En dev env. nous sommes tenus de laisser les optimisations JS désactivées, le débogage devient difficile dans le cas contraire, et utilisons également rarement la commande deploy, l'actualisation de la page déclenche cette génération de fichiers statiques. Merci !
medmek
Je pense que cela a quelque chose à voir avec requirejs-config.js ... parfois map: { '*': {est utilisé, et parfois paths: {...
Black
4

J'ai également eu ce problème mais j'ai ensuite parcouru cet article: http://www.danjoseph.me/2016/09/16/magento-2-widget-not-function/

Dans l'article, il explique que jquery était en train d'être chargé une deuxième fois sur la page et écrasait donc la version chargée précédemment par magento. Pour moi, c'était un script marketing qui chargeait également jquery pour une raison quelconque. jQuery ne doit être chargé qu'une seule fois dans la tête par cette balise et tous les autres doivent être supprimés.

<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
la source
-4

Accédez à votre dossier de thème et recherchez le fichier suivant dans le dossier Magento_Theme

default_head_blocks.xml

et remplacer

<script src="jquery.js" />

avec

<remove src="jquery.js" />

Assurez-vous de nettoyer le cache et d'actualiser la page.

J'ai eu le même problème et l'ai résolu en utilisant la méthode ci-dessus.

Nausif
la source
Ce faisant, vous supprimez jQuery. C'est vrai que ça résout l'erreur décrite sur la question mais maintenant d'autres choses sont cassées par exemple liées au bootstrap. Uncaught Error: Bootstrap's JavaScript requires jQuery at bootstrap.min.js:6
slayerbleast
La suppression de jQuery n'est pas la bonne façon de gérer cela. C'est un mauvais conseil.
Cypher909