Search code examples
javascriptjqueryhtmlcssslide

Jquery slideUp not triggering


Hey guys I'm trying to create a view with an accordion using this HTML:

<ul class="left_menu_list">
  <li class="left_menu_item active" data-item="firma">
    <div>LA FIRMA</div>
    <ul class="firma_list secondary_list">
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA firma_list</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
    </ul>
  </li>
  <li class="left_menu_item" data-item="areas">
    <div>ÁREAS E INDUSTRIAS</div>
    <ul class="areas_list hidden secondary_list">
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA areas_list</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
    </ul>
  </li>
  <li class="left_menu_item" data-item="oficinas">
    <div>OFICINAS</div>
    <ul class="oficinas_list hidden secondary_list">
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA oficinas_list</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
    </ul>
  </li>
  <li class="left_menu_item" data-item="equipo">
    <div>EQUIPO</div>
    <ul class="equipo_list hidden secondary_list">
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA equipo_list</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
    </ul>
  </li>
  <li class="left_menu_item" data-item="compromiso">
    <div>COMPROMISO</div>
    <ul class="compromiso_list hidden secondary_list">
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA compromiso_list</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
    </ul>
  </li>
  <li class="left_menu_item" data-item="comunicacion">
    <div>COMUNICACIÓN</div>
    <ul class="comunicacion_list hidden secondary_list">
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA comunicacion_list</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
    </ul>
  </li>
  <li class="left_menu_item" data-item="empleo">
    <div>EMPLEO</div>
    <ul class="empleo_list hidden secondary_list">
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA empleo_list</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
    </ul>
  </li>
  <li class="left_menu_item" data-item="alumni">
    <div>ALUMNI</div>
    <ul class="alumni_list hidden secondary_list">
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA empleo_list</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
      <li class="secondary_list_item">LA FIRMA</li>
    </ul>
  </li>
</ul>

With this css:

.left_menu_list{
        .left_menu_item{
          .secondary_list{
            display: none;
            position: relative;
            background: @white;
            margin-top: 0;
            left: -4.42vw;
            width: 100%;
            top: 0;
            padding-left: 4.42vw;
            .secondary_list_item{
              margin-left: 20px;
            }
          }
}

I've create some JS code, trying to create the effect:

$('.left_menu_item').click(function(){
   if(false == $(this).children('ul').is(':visible')) {
        $(this).children('ul').slideUp(300);
    }
    $(this).children('ul').slideToggle();
});

The main problem is that slideDown() effect works perfectly but, the slideUp() one does not works. It makes the slide down, but when I click on another item, the slideUp does not trigger, it just get hiden with no effect.

Does anyone know why? Thanks.


Solution

  • Do it like below (only 3 line of code):-

    $('.left_menu_item').click(function(){
      $(this).children('ul').slideToggle();
      $('.left_menu_item').not(this).children('ul').slideUp();
    });
    

    Note:- CSS shown by you is wrong. Change it accordingly as i do in my answer

    Also you can provide some time-span in both like slideToggle(500) and slideUp(500) to make it bit smother.

    Working example with your code:-

    https://jsfiddle.net/b8ww8q8L