类型错误:jQuery(...).ready(...)不是一个函数。

28

好的,我知道这个问题之前已经被问过了,但是似乎没有一个答案适用于我的情况。我正在尝试运行一个非常小的jQuery代码(我刚刚开始学习它)。

jQuery(document).ready(function(){
    jQuery('.comtrig').on('click',function(){
        $(this).next().animate({'display':'inline'},1000);
    });
})();

我在Firefox中遇到错误TypeError: jQuery(...).ready(...)不是一个函数或者在Chrome中遇到错误Uncaught TypeError: object is not a function

  • 解决方案1是将$替换为jQuery,但我已经像上面展示的那样做了。
  • 我也没有使用WordPress。
  • 我只使用jQuery和上面的迷你脚本,没有其他JS。
  • jQuery本身似乎加载正常 enter image description here

我错过了什么?


1
如果在浏览器控制台中输入 $ 或 jQuery,会发生什么? - Purple Hexagon
2
为了确保,您是否在jQuery(...).ready(...)调用之前加载了jQuery? - Niet the Dark Absol
4
我认为有一个打字错误 })(); - Satpal
jQuery的<script>标签紧接着小型脚本的<script>标签。我不确定这是否保证它也首先加载,因为第二个脚本比较小且被本地存储。 - RubenGeert
2
})(); 替换为 });,这是不正确的 {()) - Satpal
显示剩余3条评论
5个回答

48

试着在文档准备就绪的末尾移除这个();

jQuery(document).ready(function(){
  jQuery('.comtrig').on('click',function(){
    $(this).next().animate({'display':'inline'},1000);
  });
}); //<----remove the (); from here

()通常用于具有以下语法的立即执行函数表达式(IIFE):

(function(){
   // your stuff here
})(); //<----this invokes the function immediately.

您的错误:

在 Firefox 中 = TypeError: jQuery(...).ready(...) 不是一个函数

在 Chrome 中 = Uncaught TypeError: object 不是一个函数

原因是:

您的文档准备处理程序不是一个自执行匿名函数


@Jai:我明白了!()是用于自执行匿名函数,而$(document).ready语法不是自执行匿名函数。谢谢你写下这个有帮助的澄清。 - RubenGeert
1
当您调用.ready(function() { ... })时,您正在调用ready()并将匿名函数作为参数传递。当您调用.ready(function() {...})()时,您正在执行与上述相同的操作,但然后尝试将ready()的结果作为函数执行。.ready()返回一个jQuery对象,它不是一个函数。 - Jason P
@RubenGeert 可以看到使用 自执行匿名函数立即调用函数表达式 有一些特殊的语法来实现这个,而 jQuery 是这样设计和开发的,所以在你的情况下不需要这样做,尽管如果你使用了多个使用 $ 的库,你可以创建一个闭包来保存你的 $ 别名以供在闭包中使用 jQuery。 - Jai
1
@downvoter 为什么在12个赞之后还要踩。我猜这确实需要一个评论,对吧。 - Jai
@downvoter,我又被踩了一次,不知道为什么? - Jai

8

代码有两个问题。

1- 代码结尾处的括号有误。

2 - 在函数中,$(this) 应该改为 jQuery(this) 或者使用 $。

jQuery(document).ready(function($){
    $('.comtrig').on('click',function(){
        $(this).next().animate({'display':'inline'},1000);
    });
});

1
但是你完全没有解释你改变了什么,以及为什么要改变它。也许如果你解释了一下,人们会花点时间去理解... - Niet the Dark Absol
我完全同意@NiettheDarkAbsol的观点,你的回答是第一个正确的答案,但没有解释。 - Satpal

3
删除末尾多余的括号(),保留以下代码。
jQuery(document).ready(function(){
    jQuery('.comtrig').on('click',function(){
        $(this).next().animate({'display':'inline'},1000);
    });
}); // <== remove () from here

1

通过这种方式传递jQuery对象对我有效。

$(document).ready(function () {
    console.log("jquery");
}(jQuery));

0

这些错误:

    TypeError: jQuery(...).ready(...) is not a function
    or
    Uncaught TypeError: object is not a function

如果您在代码之后实现Jquery库,则也会发生这种情况,它应该在代码之前,顺序很重要

 <script src="@Url.Content("~/Scripts/jquery-1.10.2.js")"></script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接