2010-10-22 33 views
0

我想寫一個菜單,其子條目在頁面加載時消失。Jquery「隱藏在加載」導致Javascript錯誤

如果您需要完整的HTML,我會複製它,但它只包含一堆DIV,標題下的項目有subitems

我已成功地做我通過需要:

$(document).ready(

    $(".subitems").hide() 

    ); 

然而,在Chrome中,儘管它的工作很好,我得到以下錯誤在控制檯:

alt text (使用圖片作爲我無法很好地複製格式)

當我刪除上述代碼時,錯誤消失。我想我做錯了什麼,但我看不到它,到目前爲止,它在我測試過的每個瀏覽器中都能正常工作。

在任的任何建議:

  1. 難道我做錯了什麼?
  2. 有沒有更好的方法來實現我想要的?

回答

3

你缺少匿名函數(function() { })的包裝,像這樣:

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

它試圖做的,當它執行ready處理程序在幕後$(".subitems").hide().call() ...但這不是一個函數。相反,它正在執行立即(而不是document.ready)並且在document.ready嘗試運行結果.hide()時拋出錯誤。

只是要注意,有上述短格式,以及:

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

血腥地獄,你很好! 30秒內回答!我不認爲你可以發佈一個鏈接到某個地方,它可以更詳細地解釋它。它很有效(它會標記爲答案),但如果我說我明白了爲什麼/如何,我會說謊。 – Wil 2010-10-22 23:58:23

+0

好的......當我輸入該評論時編輯!非常感謝! ....只有一件事讓我感到困惑,爲什麼它實際上工作並導致錯誤而不是僅僅導致錯誤? (完成+1,但必須等待標記爲答案) – Wil 2010-10-22 23:59:52

+1

@Wil - 好吧,'.ready()'需要一個處理程序(如'。點擊()'等),它期望一個*函數*在「事件」(在這種情況下不是真實事件)發生時運行。 (*。「subitems」)。hide()* * immediate *(與其他函數調用一樣),那麼* result *就是傳遞給'.ready()' 。問題是這是一個'.hide()'返回(用於鏈接)的jQuery對象,而不是''.call()'方法]的函數'(https://developer.mozilla.org/en/)的JavaScript /參考/ Global_Objects /功能/呼叫)。 – 2010-10-23 00:02:38

3

由於錯誤就解決了,也許有另一種方式來做到這一點。
我想你真的不想在頁面加載時隱藏,但是如果javascript處於活動狀態(想用來準備好訪問對象),就要隱藏它。如果我是對的,有一個更簡單的方法。給<html>

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

(如<html>被稱爲每次/無處不在,你已經可以做到這一點裏面的<head>

...那麼你將能夠隱藏通過CSS和唐對象不必等待準備好()

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

我不能將問題標記爲答案,因爲問題實際上是關於具體問題(哪個Nick解決),但是,我真的很喜歡這種方法,並且可能會隨(略微修改)它。謝謝。 – Wil 2010-10-23 00:08:43

相關問題