У меня очень странная проблема. В основном я создал меню в 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;
}
});
Вот данные журнала консоли ребенок родителя и т.д.
РЕШЕНИЕ: event.stopPropagation(), как @mohamed -yousef
если я получил вашу точку .. попробуйте использовать [event.stopPropagation()] (https://api.jquery.com/event.stoppropagation/) –