【问题标题】:Jquery "hide on load" causing a Javascript errorJquery“加载时隐藏”导致Javascript错误
【发布时间】:2010-10-22 23:53:12
【问题描述】:

我正在尝试编写一个菜单,其子项在页面加载时消失。

如果你需要完整的 HTML,我会复制它,但它只是由一堆 DIV 组成,标题下的项目有一个 subitems 类。

我已经通过以下方式完成了我需要做的事情:

   $(document).ready(

    $(".subitems").hide()

   );

然而,在 Chrome 中,尽管它工作正常,但我在控制台中收到以下错误:

(使用图片,因为我无法很好地复制格式)

当我删除上面的代码时,错误就消失了。我想我做错了什么,但我看不到它,到目前为止它在我测试过的所有浏览器中都可以使用。

任何建议:

  1. 我做错了吗?
  2. 有没有更好的方法来实现我想要的?

【问题讨论】:

    标签: jquery html syntax


    【解决方案1】:

    您缺少匿名函数 (function() { }) 包装器,如下所示:

    $(document).ready(function() {
     $(".subitems").hide();
    });
    

    当它执行ready 处理程序时,它试图在幕后做$(".subitems").hide().call()...但这不是一个函数。相反,它立即 执行(不在document.ready 上)并在document.ready 尝试运行.hide()结果 时抛出错误。

    请注意,上面还有一个更短的形式:

    $(function() {
     $(".subitems").hide();
    });
    

    【讨论】:

    • 该死的你真棒! 30 秒内给出答案!... 有效。我不认为你可以发布一个链接到某个地方来更详细地解释它?它的工作原理很棒(因此将标记为答案),但是如果我说我理解为什么/如何理解,那我就是在撒谎。
    • 好的...在我输入该评论时进行了编辑!非常感谢! ....只有一件事让我感到困惑,为什么它实际上会起作用并导致错误而不是仅仅导致错误? (完成 +1,但必须等待标记为答案)
    • @Wil - 好的,所以.ready() 需要一个处理程序(如.click() 等),它希望在“事件”(不是真正的在这种情况下的事件)发生。 发生的是它正在运行$(".subitems").hide()立即(就像任何其他函数调用一样)然后结果就是传递给@的内容987654333@。问题是 .hide() 返回(用于链接)的 jQuery 对象,而不是具有 .call() methodfunction
    【解决方案2】:

    当错误解决后,也许还有另一种方法。
    我猜你真的不想在页面加载时隐藏,但如果 javascript 处于活动状态则想隐藏(你准备好访问对象)。如果我是对的,还有更简单的方法。给<html> 一个类

    $('html').addClass('scripted')
    

    (因为<html> 随时随地都为人所知,您已经可以在<head> 中执行此操作)

    ...那么您将能够通过 css 隐藏对象,而不必等待 ready()

    html.scripted .subitems{display:none}/*only hidden if js is off*/
    

    【讨论】:

    • 我无法将其标记为答案,因为问题实际上是关于那个特定问题(尼克解决了这个问题),但是,我真的很喜欢这种方法,并且可能会采用(稍微修改)它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多