2011-11-02 3 views
0

Comment êtes-vous des gens ?, im faire un script pour un SlideMenu en utilisant ul/li (ul/li), l'idée est d'être en utilisant slideUp/bas sans classes internesJquery - Menu Slide (HandMade)

Le le problème que j'ai est quand cliquez sur un lien à l'intérieur de mon ul (père) li (fils) ul li a ul (ul li ul) fils se cacher. L'idée c'est juste de faire ça si on clique dans le ul li a, pas dans le ul li ul li a. J'ai essayé avec ": first", ".first()", ": premier-enfant".

L'espoir pourrait me rendre clair. : D

here's du code:

HTML

<ul id="menu"> 
     <li> 
      <a href="#">Menu 1</a> 
      <ul> 
       <li><a href="#">Sub Menu 1</a></li> 
       <li><a href="#">Sub Menu 2</a></li> 
       <li><a href="#">Sub Menu 3</a></li> 
      </ul> 
     </li> 
     <li> 
      <a href="#">Menu 2</a> 
      <ul> 
       <li><a href="#">Sub Menu 1</a></li> 
       <li><a href="#">Sub Menu 2</a></li> 
       <li><a href="#">Sub Menu 3</a></li> 
      </ul> 
     </li> 
     <li><a href="#">Menu 3</a></li> 
    </ul> 

Javascript (Jquery)

function submenu(id) { 
     var div = "#"+id; 
     $("ul"+div+" li a").each(function() { 
      $(this).click(function() { 
      var li = $(this).parent();  
      $("ul"+div+" li ul").each(function() { $(this).slideUp("fast"); }); 
      if(li.children("ul").is(":visible")) { 
       li.children("ul").slideUp("fast"); 
      } else { 
       li.children("ul").slideDown("fast"); 
      } 
      return false; 
      }); 
     }); 
    } 

    $(document).ready(function(){ submenu("menu"); } 

Merci

Répondre

0

soit utiliser le sélecteur de css enfant ('ul. '+ div +'> li> a) ou sélectionnez les enfants avec jQuery.

$(div).children(li).children(a).each(function() { 
    /* your code here */ 
}); 

Comme vous l'avez, votre premier sélecteur saisit toutes les ancres dans la liste.

0

Je ne konw si je l'ai vraiment compris votre problème, mais voici une jsFiddle en action: http://jsfiddle.net/BVVGX/

Si vous cliquez sur un enfant, rien ne se passe, mais si vous cliquez sur un père, il glisse vers le haut ou le bas de ses propres enfants.

Edit:http://jsfiddle.net/BVVGX/6/

La clé est d'ajouter un rappel après la slideDown afin de cacher les autres déjà menu ouvert que pendant la slideDown Jquery ne sait pas vraiment si le ul est visible ou non.

+0

vous avez bien compris, mais vous avez eu un problème. lorsque vous cliquez sur un autre lien (qui a sous-menu) ne cache pas le précédemment ouvert. C'est la grosse affaire de mon script :( – lickybuay

+0

Peut-être que cette mise à jour fera ce que vous voulez :) http://jsfiddle.net/BVVGX/6/ –