2010-10-28 86 views
0

這只是一個真正的新手問題,但我只是用它來創建一個簡單的手風琴菜單。該HTML輸出中是這樣的:jQuery Accordion Menu

<ul id="nav-sub"> 
<li class="sub-level-0"><a href="#">Menu Item One</a></li> 
<li class="parent-here last sub-level-0"><a href="#">Menu Item Two</a> 
    <ul> 
     <li class="here sub-level-1"><a href="#">Sub Menu Item One</a></li> 
     <li class="last sub-level-1"><a href="#">Sub Menu Item Two</a></li> 
    </ul> 
</li>                       

而jQuery的我目前擁有的是:

$(document).ready(function() { 

// Show the children of the first product on page load but leave the others hidden 
$("ul#nav-sub li.parent-here ul").show(); 

// Then attach a visibility toggle to each of the parents 
if ($("ul#nav-sub li.sub-level-0 ul").size > 0) { 
    $("ul#nav-sub li.sub-level-0 > a").click(function(){ 
     $(this).next().slideToggle("slow"); 
     return false; //Prevent the browser jump to the link anchor 
    }); 
} 

});

這是最接近我可以完全工作,但唯一不起作用的是切換動畫。它不是緩慢的過渡,而是簡單地跳開。

我基本上想要的是獲得緩慢的過渡效果,但也只返回假(如果菜單項有任何子節點,則返回false(阻止鏈接錨點的默認瀏覽器操作)(子菜單 - 如上面的Menu第二項)。我需要Menu Item One返回true並直接進入該頁面。

感謝

+0

任何理由不使用現有的手風琴插件嗎? – Lazarus 2010-10-28 13:11:38

+0

你有沒有看過[JqueryUI](http://jqueryui.com/demos/),還是你真的只是想自己建立這個學習或什麼? – gideon 2010-10-28 13:15:41

+0

我聽說過jQuery UI並瞭解Accordion選項,但是我只是想進入jQuery並想寫任何我自己可以熟悉的東西。當我對它有信心的時候,jQuery UI將提供一個有用的定時器,但是直到那時纔開始。 – Ian 2010-10-28 13:18:05

回答

0

林喜歡你,喜歡去理出頭緒來學習...我認爲這是一件容易的事,但哎呀我花了30分鐘的調試該死的東西..

http://jsfiddle.net/QcBNK/92/

HTML:

<ul id="nav-sub"> 
    <li class="sub-level-0"><a href="#">Menu Item One</a> 
    <ul> 
     <li class="sub-level-1"><a href="#">Sub Menu Item One</a></li> 
     </ul> 
     </li> 
    <li class="sub-level-0"><a href="#">Menu Item Two</a> 
     <ul> 
       <li class="sub-level-1"><a href="#">Sub Menu Item One</a></li> 
       <li class="sub-level-1"><a href="#">Sub Menu Item Two</a></li> 
     </ul> 
     </li>  
</ul> 

JQuery的:

$(document).ready(function() { 
    //hide all SUB elements 
    $(".sub-level-1").hide(); 
    //attach click to top elements only 
    $("li.sub-level-0").mousedown(function(evt) { 
     //find the sub element and toggle it.. 
     if(($(evt.target).text().indexOf("Sub"))!=0) {//Bad hack! sry =(
     $(this).find("ul .sub-level-1").slideToggle(); 
     } 
    }); 

}); 

注:林不是專家。我後來注意到,子項元素拋出事件,奇怪的是find()方法返回一個孩子<ul>即使子元素扔事件!?所以我無法使用evt.target==this來測試冒泡事件。子元素事件返回整個父李! = S所以我狠狠地投了!也許有更好的方法。

+0

是的,我知道,表面上看起來很容易,但微調有點難。儘管我已經給出瞭解決方案,但我並不總是在所有菜單上獲得動畫效果,並且當我點擊子菜單項時,該列表再次滑動回來。順便說一句,你爲什麼使用.mousedown而不是.click? – Ian 2010-10-28 16:31:33

+0

哦,該鏈接上的代碼沒有更新到這裏的答案。請參閱http:// jsfiddle。net/QcBNK/92 /我在調試的時候改成了mousedown,但是一切正常的時候我忘了改回它。雖然我無法從演奏中說出,但並沒有做出任何區別。觀點看法。 – gideon 2010-10-28 16:46:29

+0

我試過了你發送的鏈接中的代碼,但不幸的是它仍然不存在。它不會阻止父項上的點擊,並且當點擊某個子鏈接時,它應該保持打開狀態時會滑回。 – Ian 2010-10-28 17:39:20

0

HTML:

<dl> 

<dt><a href="#">Menu Item One</a></dt> 
<dd> 
    <ul> 
     <li><a href="#">Sub Menu Item One</a></li>   
    </ul> 
</dd> 

<dt><a href="#">Menu Item Two</a></dt> 
<dd> 
    <ul> 
     <li><a href="#">Sub Menu Item One</a></li> 
     <li><a href="#">Sub Menu Item Two</a></li> 
    </ul> 
</dd> 

<dt><a href="#">Menu Item Three</a></dt> 
<dd> 
    <ul> 
     <li><a href='#'>Sub Menu Item One</a></li> 
     <li><a href='#'>Sub Menu Item Two</a></li> 
     <li><a href='#'>Sub Menu Item Three</a></li>    
    </ul> 
</dd> 

</dl> 

JQuery的:

<script> 
    $("dd").hide(); 

    $("dt a").click(function(e) { 
     $(e.target).parent().next().slideToggle(); 
    }); 
</script> 
+0

你應該爲你的答案添加一些解釋。不只是代碼。 – 2012-10-26 16:35:00