2015-11-24 4 views
0

У меня очень странная проблема. В основном я создал меню в wordpress, в котором есть родительские, дочерние, дочерние и внутри некоторых сообщений.Иногда при щелчке дважды выполняется

Я написал сценарий jquery, который добавляет класс подсветки на <li>, чтобы развернуть <ul>, который находится внутри <li>. формат списка следующие

<li class"menu-item-has-children"><a>Parent</a> 
<ul> 
<li class="menu-item-has-children"><a>Child</a> 
<ul> 
<li class="menu-item-has-children"><a>Sub Child</a> 
<ul> 
<li><a> post</a></li> 
<li><a> post 2 </a></li> 
</ul> 
</li> 
</ul> 
</li> 
</ul> 
</li> 

Так что я написал следующий сценарий, чтобы добавить класс выделения для расширения суб ребенка нажатого <li>. Когда я нажимаю на какой-либо <li> родителя, дочерний дочерний дочерний процесс работает нормально, но когда я нажимаю на сообщения, он удаляет класс выделения из родительского <ul> вместо того, чтобы забирать меня на страницу щелкнутого сообщения.

Я сделал консольный журнал $ (this), и когда вы нажимаете на любой родительский, дочерний, дочерний дочерний, он показывает мне <ul>, который имеет, но когда я нажимаю на какие-либо сообщения, он показывает мне сначала тег <a>, родителем <ul>. Кто-нибудь знает, почему?

Вот мой JQuery код

$(document).unbind("click").on('click',".sidebar-right li",function(e){ 
    var found = false; 
    var tmp = String($(this).val()); 
    if (tmp.indexOf("ul") != -1){ 
     found = true; 
    } 
    if (($(this).hasClass("menu-item-has-children")) && (!$(this).children('ul').hasClass("highlight"))) 
    { 
     $(this).children("a").addClass("highlight_icon"); 
     $(this).children('ul').addClass("highlight"); 
     return false; 
    } 
    else if (($(this).has("a") && ($(this).has("ul"))) && (!$(this).children('ul').hasClass("highlight"))) 
    { 
     return true; 
    } 
    else if ($(this).children('ul').hasClass("highlight")) 
    { 
     $(this).children('a').removeClass("highlight_icon"); 
     $(this).children('ul').removeClass("highlight"); 
     return false; 
    } 
    else 
    { 
     return true; 
    } 

    }); 

Вот данные журнала консоли ребенок родителя и т.д. enter image description here

сообщение нажмите enter image description here

РЕШЕНИЕ: event.stopPropagation(), как @mohamed -yousef

+3

если я получил вашу точку .. попробуйте использовать [event.stopPropagation()] (https://api.jquery.com/event.stoppropagation/) –

ответ

0

try

$(".sidebar-right").on('click',".sidebar-right li", function(){ 

    ....}); 
Смежные вопросы