2015-07-03 4 views
2

У меня есть Accordian стиль меню, который прекрасно работает на парении состояние, но я хотел бы, чтобы изменить к мыши вместо ...Javascript парения/нажмите проблемы

<script type="text/javascript"> 

$(document).ready(function(){ 
    $('#nav > li').hover(
     function() { 
      if ($('> span',this).attr('class') != 'active') { 
       $('#nav li ul').slideUp(); 
       $('span',this).next().slideToggle(); 
       $('#nav li span').removeClass('active'); 
       $('> span',this).addClass('active'); 
      } 
     }, 
     function() { 
      $('#nav li ul').slideUp(); 
      $('#nav li a').removeClass('active'); 
     }); 
    }); 
</script> 

Но просто заменить зависать с нажмите не работает, любой советуют высоко ценится я дизайнер так что мой JS довольно беден :)

+1

конечно, потому что парить занимает 2 функции ее 'на' зависании и 'выключено' зависания вызова назад, изменив его, чтобы щелкнуть wont work, вам нужно поместить код в виде «off» call обратно в 'else' часть вашего оператора' if' – atmd

+0

you m Кроме того, используйте события onmousedown и 'onmouseup' – Burki

+0

Пожалуйста, разместите пример своего HTML-кода, так как невозможно определить, какие элементы есть только из вашего скрипта. Предпочтительно, как скрипт JS! https://jsfiddle.net/ – beercohol

ответ

0

.hover(fucntion() {}, function()); // .hover() accept two function .click(function() {}); // only accept one

попробовать

$('selector').on('click', function() { 
    if($(this).hasClass('active')) { 
     // do something if this has class active 
    } 
    else { 
     // do something if not. 
    } 

}); 
1

Попробуйте это,

<script type="text/javascript"> 
$(document).ready(function() { 
     $('#nav > li').click(function() { 
      if ($('> span', this).attr('class') != 'active') { 
       $('#nav li ul').slideUp(); 
       $('span', this).next().slideToggle(); 
       $('#nav li span').removeClass('active'); 
       $('> span', this).addClass('active'); 
      } 
     }).mouseout(function (e) { 
      if ($(e.target).parents().find('#' + $(this).attr('id')).length) return; 
      $('#nav li ul').slideUp(); 
      $('#nav li span').removeClass('active'); 
     }); 
    }); 

</script> 

HTML:

<li id="t1"><span>Nav item click me 1</span> 
       <ul> 
        <li><a href="#">Sub link 1</a></li> 
        <li><a href="#">Sub link 2</a></li> 
        <li><a href="#">Sub link 3</a></li> 
        <li><a href="#">Sub link 4</a></li> 
       </ul> 
      </li> 
      <li id="t2"><span>Nav item click me 2</span> 
       <ul> 
        <li><a href="#">Sub link 1</a></li> 
        <li><a href="#">Sub link 2</a></li> 
        <li><a href="#">Sub link 3</a></li> 
        <li><a href="#">Sub link 4</a></li> 
       </ul> 
      </li> 
+0

Легенда, это работает .... Спасибо, Джон! :) http://jsfiddle.net/dukeofazard69/scgwugjz/6/ AH, на самом деле что-то немного липкое. Нажмите «Nav item click me 1» (по ссылке выше), сверните его, затем попробуйте нажать его еще раз, не хотите играть в мяч. Есть идеи? –

+0

@keirananderson, в mouseout, нам нужно заменить #nav li a на #nav li span. Ответ обновлен –

+0

Ах, как только я нахожусь на главном навигационном объекте, он клонит, поэтому вы не можете добраться до подписок –