2011-03-31 82 views
0

我試圖創建一個使用jQuery滑動FAQ菜單,但我得到一個錯誤,指出hide()爲null。我已經在Mac和Firefox上的Chrome和Firefox上嘗試過它。下面的代碼:jquery hide()函數

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

$(document).ready(function(){ 

    $('.hide').hide(); 

    $('h5').click(function(){ 
    $(this).next().slideToggle("slow"); 
    return false; 
}); 


}); 

這裏是HTML:

<a href="#" ><h5 >The Heading </h5></a><br /> 

<div class="hide"> 
The content. 
</div> 

我已經花了過去三小時之澆在書籍和在線教程,一切看起來正常,但顯然不是。 :P

任何幫助,非常感謝。

+3

你有沒有加入到jQuery的參考? – 2011-03-31 15:01:21

+0

這是所有的代碼? – amosrivera 2011-03-31 15:02:55

+0

是否有可能'隱藏'類和'隱藏'行爲是衝突的。如果您將課程更改爲「myhide」,會發生什麼情況? – dnagirl 2011-03-31 15:03:41

回答

1

更新:在Ant發佈頁面的公共URL後,我可以自信地重申我的觀點,即Ant在其原始問題中發佈的示例代碼中沒有問題,所以謝謝誰投下了我的投票。問題在於Ant的頁面同時使用了原型和jQuery庫。這個事實在原始問題中被省略了。這兩個庫與$變量衝突。如果你改變你的代碼螞蟻到處使用關鍵字的jQuery而不是$作爲

jQuery(document).ready(function() { 
    jQuery('.hide').hide(); 

    jQuery('.toggler').click(function() { 
     jQuery(this).nextAll('.hide:first').slideToggle("slow"); 
     return false; 
    }); }); 

我相信你的代碼將工作。另外這裏

http://api.jquery.com/jQuery.noConflict/

jQuery的頁面描述沒有什麼不對您的代碼,你可以使用無衝突技術。你可以把它放在公共網站上並分享這個網址嗎?我能想到的唯一的事情就是jQuery沒有被拉入。

嘗試在HEAD標籤

和javascript代碼閉幕後休息

</HTML> 

標籤

+0

你真的測試過他的代碼,看它是否有效嗎?如果你這樣做,我認爲你會發現問題不是那麼簡單。 – 2011-03-31 15:08:41

+0

我確實使用這裏給出的確切代碼創建了一個JSFiddle。它運行得非常好,沒有任何錯誤。最初的問題是關於hide()爲NULL而沒有別的。你爲什麼不自己創建一個JS小提琴並嘗試一下?我確實要求他把他的代碼放在一個網站上,以便我們可以看到究竟發生了什麼。在向下的投票上用槍快點不是嗎? – Nikhil 2011-03-31 15:16:55

+0

它的頁面是http://www.messiah.edu/offices/_hr/applicants/applying.html – Ant 2011-03-31 15:41:54

4

.click()處理程序是<h5>元素,從那裏它試圖隱藏.next()兄弟元素......不會有任何這些。

取而代之的是:

$(this).next().slideToggle("slow"); 

您將需要在<a>.nextAll()(即搜索所有以下的兄弟姐妹):

$(this).parent().nextAll('.hide:first').slideToggle("slow"); 

You can try it out here


或者,也許有點清潔,您可以添加一個類錨把事情簡單化,這樣的:

<a class="toggler" href="#"><h5>The Heading </h5></a><br /> 

<div class="hide"> 
The content. 
</div> 

然後,因爲你在<a>,你不需要.parent()調用,就像這樣:

$(document).ready(function() { 
    $('.hide').hide(); 

    $('.toggler').click(function() { 
     $(this).nextAll('.hide:first').slideToggle("slow"); 
     return false; 
    }); 
}); 

You can try that version out here

+0

我不認爲腳本到達click()。它看起來像瀏覽器與隱藏()的問題,並說「我放棄了......」 – Ant 2011-03-31 15:44:11

+0

@Ant - 你有原型包括在頁面以及(除了jQuery)? – 2011-03-31 16:18:38

+0

是的,原來是這個問題。不得不使用jQuery這個詞來切換$,現在它工作的很好。謝謝! – Ant 2011-03-31 17:00:28

0

我已經颳起了一陣小移動

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

,如何做到這一點的簡單例子(DEMO)。我認爲這可能比你目前的方法更清潔。我從不喜歡使用<a>作爲標題。

HTML

<div class="accItem"> 
    <div class="togHead">Heading1</div> 
    <div class="togContent">The content1</div> 
</div> 

<div class="accItem"> 
    <div class="togHead">Heading3</div> 
    <div class="togContent">The content3</div> 
</div> 

JS

$('.togContent:first').slideDown(); 
$('.togHead').click(function(){ 
    var item = $(this).parent().find('.togContent'); 
    if (! $(item).is(':visible')){ 
     $('.togContent').slideUp(); 
     $(item).slideDown("fast"); 
    }    
}); 

CSS

.togHead{ 
    width:300px; 
    background:#000; 
    color:#fff; 
    font-size:20; 
    font-weight:bold; 
    cursor:pointer; 
} 
.togContent{ 
    display:none; 
    width:300px; 
    background:#ff0;  
} 
+1

沒有必要遍歷所有的東西......例如,你可以僅僅執行'.siblings('.tgContent')',在你的例子中'item'已經是一個jQuery對象,不需要克隆它:) – 2011-03-31 15:11:53