TypeError:“未定义”不是函数(计算“ $(document)”)


139
  1. 我正在使用WordPress网站。
  2. 我将这个脚本包含在标题中。

脚本加载后,出现以下错误:

TypeError:“未定义”不是函数(计算“ $(document)”)

我不知道是什么原因或什至是什么意思。

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

$不是函数


4
确保自定义脚本之前包含了jQuery库,并且NetFirebug选项卡中没有错误(确保jQuery实际已加载)。
wsanville

...是的,当然jQuery是预先加载的。我很确定这是WordPress的问题。
dcolumbus

Answers:


239

默认情况下,WordPress在noConflict模式下使用jQuery 。您需要使用jQuery变量名而不是引用它$,例如use

jQuery(document);

代替

$(document);

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

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

5
该脚本不是必需的。您可以随便打电话,jQuery(document)而不必在$(document)任何地方。如果您确实想使用它$,那么上面的脚本仅创建一个函数,该函数接受一个参数,$然后执行传递jQuery。简而言之,在函数中,$正如您所期望的那样指向jQuery。
El Yobo

2
实际上,我所做的就是将我的正常$(document).ready(function() { // code });位置代替您的$(document);...,就像魅力一样。
dcolumbus

1
是的,这就是我的建议-“在函数内,$就像您期望的那样指向jQuery”。
El Yobo

好吧,这样做确实为您节省了几个字符:)有关自我执行语句的!function(){}()形式的更多详细信息。
El Yobo

我知道它是旧的@ElYobo,但是我想您可以编辑您的帖子,并将您的示例从第一个评论添加到响应中,作为第二个示例。谢谢您节省我的时间=)
Manatax

25

使用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>



11

我仅在Chrome上遇到过此问题。

我尝试添加

var $ =jQuery.noConflict();

在打电话之前

$(document).ready(function () {

有效。

非常感谢


谢谢你这个 我知道我可以使用“ jQuery”而不是“ $”解决问题,但是我的问题是,以这种方式编写时,它会触发Komodo编辑,因此我不得不选择在$上提示/完成代码还是让JavaScript真正起作用。这种方法让我兼而有之。
George Kendros

6

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



4

我会用这个

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

2

我在Web开发平台中也曾多次遇到这样的问题。实际上它不是JS冲突,当我们将html网站加载到浏览器时,我们不会遇到此类错误,但是当我们通过localhost加载这些类型的网站时,则会遇到此类问题。那是因为本地主机。当我们通过本地主机加载脚本时,它会扫描脚本并呈现输出。但是当我们不使用本地主机时。它只是扫描输出。例如,当我们在本地主机上编写php代码并在没有主机的情况下运行时,会收到错误消息。但是,如果代码正确并在主机中运行,则将获得实际输出,而当使用inspect元素时,将以HTM1格式而不是PHP格式获取输出代码,这是因为代码的呈现。

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

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

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


1

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



1

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

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

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



1

您可以在function()中传递$

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

// jQuery code is in here

});

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

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

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  jq('selector').show();
});
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.