【问题标题】:TypeError: 'undefined' is not a function (evaluating '$(document)')TypeError:“未定义”不是函数(评估“$(文档)”)
【发布时间】:2011-12-19 23:29:42
【问题描述】:
  1. 我使用的是 WordPress 网站。
  2. 我将此脚本包含在标题中。

当脚本加载时,我得到这个错误:

TypeError: 'undefined' is not a function (evalating '$(document)')

我不知道是什么原因造成的,也不知道它意味着什么。

在萤火虫中,我得到了这个:

$ 不是函数

【问题讨论】:

  • 确保您在 before 自定义脚本中包含 jQuery 库,并且 Firebug 的 Net 选项卡中没有错误(确保 jQuery 实际被加载)。
  • ... 是的,当然 jQuery 是预先加载的。我很确定这是一个 WordPress enque 问题。

标签: jquery wordpress


【解决方案1】:

你可以在function()中传入$

jQuery(document).ready(function($){

// jQuery code is in here

});

或者你可以用这个jQuery(document);替换$(document);

或者你可以使用jQuery.noConflict()

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  jq('selector').show();
});

【讨论】:

    【解决方案2】:

    我会用这个

    (function ($) {
       $(document);
    }(jQuery));
    

    【讨论】:

      【解决方案3】:

      我在网络开发运营商也遇到过很多次这样的问题。其实它不是JS冲突,当我们将html网站加载到浏览器时我们不会遇到这样的错误,但是当我们通过localhost加载这些类型的网站时就会遇到这样的问题。那是因为本地主机。当我们通过 localhost 加载脚本时,它会扫描脚本并呈现输出。但是当我们没有使用 localhost 时。它只是扫描输出。例如,当我们在本地主机上编写 php 代码并在没有主机的情况下运行时,我们会得到错误。但是如果代码是正确的并且通过主机运行,我们会得到实际的输出,当我们使用检查元素时,我们会得到 HTMl 格式的输出代码,而不是 PHP 格式的输出代码,这是因为代码的渲染。

      这是渲染错误。因此,要修复这些 jquery 代码错误,其中一种解决方案可能是使用此方法。

      jQuery(document).ready(function($){
      /******** Body of Jquery Code*****/
      });
      

      此代码的作用是通过应用 jquery 将“$”注册为函数的变量。否则,默认情况下 .js 文件仅读取为 javascript。

      【讨论】:

        【解决方案4】:
         ;(function($){
                // your code
            })(jQuery);
        

        将你的js代码放在上面的闭包中,应该可以解决问题。

        【讨论】:

          【解决方案5】:

          使用 jQuery 的noConflict。这对我来说是奇迹

          var example=jQuery.noConflict();
          example(function(){
          example('div#rift_connect').click(function(){
              example('span#resultado').text("Hello, dude!");
              });
          });
          

          也就是说,假设您在 HTML 中包含 jQuery

          <script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
          

          【讨论】:

            【解决方案6】:

            你可以在 sn-p 下面同时使用 jQuery 和 $。它对我有用

            jQuery( document ).ready(function( $ ) {
              // jQuery(document)
              // $(document)
            });
            

            【讨论】:

              【解决方案7】:

              在这之间包装所有脚本...

              <script>
                  $.noConflict();
                  jQuery( document ).ready(function( $ ) {
                    // Code that uses jQuery's $ can follow here.
                  });
              </script>
              

              许多 JavaScript 库使用 $ 作为函数或变量名,就像 jQuery 一样。在 jQuery 的例子中,$ 只是 jQuery 的别名,所以所有功能都可以在不使用 $ 的情况下使用。如果您需要在 jQuery 旁边使用另一个 JavaScript 库,请通过调用 $.noConflict() 将 $ 的控制权返回给另一个库。 $ 的旧引用在 jQuery 初始化期间被保存; noConflict() 只是恢复它们。

              【讨论】:

                【解决方案8】:

                我只在 Chrome 上遇到过这个问题。

                我尝试添加

                var $ =jQuery.noConflict();
                

                就在打电话之前

                $(document).ready(function () {
                

                成功了。

                非常感谢

                【讨论】:

                • 感谢这个。我知道我可以使用“jQuery”而不是“$”来解决这个问题,但我的问题是它在以这种方式编写时会触发 Komodo 编辑,所以我必须在 $ 上获取代码提示/完成或让我的 JavaScript 实际工作之间做出选择。这种方法让我两者兼得。
                【解决方案9】:

                试试这个 sn-p:

                jQuery(function($) {
                  // Your code.
                })
                

                它对我有用,也许它也会帮助你。

                【讨论】:

                  【解决方案10】:

                  两件事:

                  1. 确保在 $(document) 之前添加了 jQuery 库。
                  2. 然后只需将所有“$”更改为:jQuery,就像之前的 cmets 一样。

                  【讨论】:

                    【解决方案11】:

                    使用这个:

                    var $ =jQuery.noConflict();
                    

                    【讨论】:

                      【解决方案12】:

                      还要检查是否包含 jQuery,然后是一些组件/其他库(如 jQuery UI),然后意外地再次包含 jQuery - 这将重新定义 jQuery 并将组件助手(如 .datepicker)从实例中删除。

                      【讨论】:

                        【解决方案13】:

                        我在页面标题中包含 jQuery 时也遇到了这个问题,但没有意识到主机已经自动将它包含在页面中。因此,实时加载您的页面并检查源代码以查看是否链接了 jQuery。

                        【讨论】:

                          【解决方案14】:

                          Wordpress 默认使用 jQuery noConflict 模式。您需要使用jQuery 作为变量名来引用它,而不是$,例如使用

                          jQuery(document);
                          

                          而不是

                          $(document);
                          

                          您可以轻松地将其包装在一个自执行函数中,以便 $ 再次引用 jQuery(并避免污染全局命名空间),例如

                          (function ($) {
                             $(document);
                          }(jQuery));
                          

                          【讨论】:

                          • 脚本不是必须的;您可以在任何地方拨打jQuery(document) 而不是$(document)。如果您确实想改用$,那么上面的脚本只是创建了一个函数,该函数接受一个参数$,然后通过jQuery 执行它;简而言之,在函数中,$ 正如你所期望的那样指向 jQuery。
                          • 实际上,我所做的是将我的普通$(document).ready(function() { // code }); 代替你的$(document); ... 这就像一个魅力。
                          • 是的,这就是我的建议——“在函数内,$ 指向 jQuery,正如你所期望的那样”。
                          • 嗯,这样确实可以为您节省几个字符 :) 有关 the !function(){}() form of self executing statement 的更多详细信息。
                          • 我知道这是旧的@ElYobo,但我认为您可以编辑您的帖子并将您的示例从您的第一条评论添加到响应中作为第二个示例。感谢您为我节省时间 =)
                          猜你喜欢
                          • 2018-08-04
                          • 2014-01-01
                          • 2015-03-30
                          • 2023-04-03
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2014-09-13
                          • 2018-08-27
                          相关资源
                          最近更新 更多