获取TypeError:$ .widget不是Magento 2的函数


9

我在Minicart,“产品”视图页面和“ 结帐”页面中遇到JavaScript类型错误。

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

我该如何解决?


您是否运行了deploy命令?
Rakesh Jesadiya

是的,我正在运行deploy命令,但仍然出现错误。
Nikul,2016年

您必须先运行pub / static文件夹后才能运行部署命令
Rakesh Jesadiya

您好Rakesh可以使用该命令删除pub / static文件夹的任何命令。
Nikul

您必须手动删除
Rakesh Jesadiya

Answers:


8

我在使用Porto Theme时遇到了同样的问题。就我而言,有时可以识别jQuery,有时不能识别。不幸的是,我不了解原因,但是找到了解决方案。

简而言之:合并所有javascript文件。

  1. 在后端中转到:

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事后

现在清除浏览器中的缓存并重新加载。

对于开发此解决方案并不令人满意,但至少对于生产而言,使用它应该是一个有效的解决方案,并且没有不可预测的行为。

希望能帮助到你..


对我有帮助,谢谢。我遇到了同样的问题
bourax

我只对CSS / Javascript和Magento Cache进行了刷新,并且可以使用,但是您的回答可以帮助解决其他问题!在开发环境中。我们势必会禁用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的市场营销脚本。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>


-4

转到主题文件夹,然后在Magento_Theme文件夹中找到以下文件

default_head_blocks.xml

并更换

<script src="jquery.js" />

<remove src="jquery.js" />

确保清除缓存并刷新页面。

我有同样的问题,并使用上述方法解决了。


这样做是要删除jQuery。确实可以解决问题上描述的错误,但是现在其他问题都被打破了,例如与引导程序有关。Uncaught Error: Bootstrap's JavaScript requires jQuery at bootstrap.min.js:6
slayerbleast

删除jQuery不是解决此问题的正确方法。这是不好的建议。
Cypher909 '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.