Как только ваша мышь покидает li.parentmenu, эффект наведения, который вы применили с помощью jquery, больше не работает, так как ваша мышь больше не находится над этим элементом.
Семантически неверно иметь <ul>
внутри <ul>
. Вы должны обернуть вложенный <ul>
в элемент <li>
.
Больше информации об элементе ul и его допустимом содержании здесь: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul
Применение правильного semanti c приятно приводит нас к одному решению, которое вы может подать заявку.
Возможное решение
В вашем HTML вы можете обернуть вас ul.dropdown внутри li.parentmenu.
После этого вы больше не можете использовать селектор .next () для вашего оператора if и действия класса. Вместо этого вы можете использовать .find ('. Dropdown'), например.
Теперь, когда вы наводите курсор мыши на свой ul.dropdown, вы по-прежнему зависаете над li.parentmenu, и ваш выпадающий список остается видимым.
Здесь вы можете найти работающий пример JSFiddle: https://jsfiddle.net/7hwug3jz/
А вот ваш код HTML и jQuery с Изменения, которые я только что объяснил.
HTML
<div class="accordion">
<ul>
<li class="parentmenu">
<a href="#"><i class="fas fa-home"></i> Home</a>
<ul class="dropdown">
<li><a href="#">Home Submenu 1</a></li>
<li><a href="#">Home Submenu 2</a></li>
</ul>
</li>
<li class="parentmenu">
<a href="#"><i class="fas fa-address-card"></i> About</a>
<ul class="dropdown">
<li><a href="#">About Submenu 1</a></li>
<li><a href="#">About Submenu 2</a></li>
</ul>
</li>
<li class="parentmenu">
<a href="#"><i class="far fa-edit"></i> Services</a>
<ul class="dropdown">
<li><a href="#">Services Submenu 1</a></li>
<li><a href="#">Services Submenu 2</a></li>
</ul>
</li>
<li class="parentmenu">
<a href="#"><i class="fas fa-id-card-alt"></i> Contact</a>
<ul class="dropdown">
<li><a href="#">Contact Submenu 1</a></li>
<li><a href="#">Contact Submenu 2</a></li>
</ul>
</li>
</ul>
</div>
jQuery
jQuery(document).ready(function() {
$('.parentmenu').hover(function() {
if ($(this).find('.dropdown').css('display') == 'none'){
$(this).find('.dropdown').addClass('deployed');
}
else {
$(this).find('.dropdown').removeClass('deployed');
}
});
});