2015-02-18 2 views
-1

У меня есть список меню, где некоторые пункты меню также есть подменит, со следующей структурой:JQuery, если функция повторяется

<div> 
<ul class="mobile-menu"> 
    <li class="menu-item"><a href=..></a></li> // menu item without sub-menu 
    <li class="menu-item-has-children"> //menu item with sub-menu 
     <a href=...</a> //link attached to parent menu item 
     <ul class="sub-menu"> 
      <li ><a href=...</a></li> 
      <li ><a href=...</a></li> 
     </ul> 
    </li> 
</ul> 
</div> 

я написал код для события, связь, прикрепленной к меню элемент с дочерним элементом. Внутри это оператор if, который говорит, что если элемент списка уже отмечен как открытый, затем закройте (slideUp) подменю и удалите открытый маркер, иначе откройте (slideDown) подменю и добавьте открытый маркер.

По умолчанию все подменю изначально закрыты и не имеют открытого маркера. Когда я нажимаю на элемент родительского меню, подменю открывается, а затем снова закрывается. Я прошел через него в Firebug, и код буквально запущен в инструкции if, а в конце инструкции else он возвращается к началу и выполняет оператор if во второй раз перед остановкой. Я попытался добавить «return false»; но они не имеют никакого значения.

jQuery("li.menu-item-has-children > a").click(function(event){ 

event.preventDefault(); 

if(jQuery(this).parent().hasClass("open")){ 
    jQuery(this).next("ul").slideUp(100); 
    jQuery(this).parent().removeClass("open"); 
    return false; 
} else { 
    jQuery(this).next("ul").slideDown(100); 
    jQuery(this).parent().addClass("open"); 
    return false; 
} 

return false; 
}); 

Я не понимаю?!? Любая помощь будет с благодарностью получена. Спасибо!

Ronel

Edit: Так что я получил его функционирование в jsfiddle (https://jsfiddle.net/ronelz/hvy9wxy9/12/) и код отлично работает ?! Однако на самом веб-сайте он запускает оператор if дважды, то есть вместо открытия подменю он открывается, а затем снова закрывает подменю снова.

Любые предложения о том, где я могу начать искать причину, будут с благодарностью получены. Спасибо.

+0

вы можете добавить CSS, поэтому он может быть добавлен к скрипке? .n.b вам не нужно 'return', событие click не возвращает значение – atmd

+0

Pls, укажите jsfiddle и скажите, что должно произойти! –

+0

Удалить все 'return false;' Just have' event.preventDefault(); 'Каков результат? –

ответ

0

Отправил бы это как комментарий, но я не могу сейчас. Вы пробовали использовать $(selector).on('click',function(e){}) вместо $(selector).click(function(e){})? Что в итоге?

$(selector).on('click', function(e){ //code to be executed; });

+0

Что бы это сделало? on является делегатом usful Только тогда, когда элементы добавляются динамически в HTML. –

+0

Просто чтобы узнать, получилось ли у вас такое же поведение. Если это так, вы узнаете, что ошибка от анонимной функции в 'click()'. то есть 'if() {} else {}'. Должна помочь в вашей отладке. – k32y

+0

Спасибо за идею, я пробовал, но это не имело значения. – Ronelz

Смежные вопросы