【发布时间】:2019-03-22 00:11:42
【问题描述】:
在移动即时通讯上使用 javascript 来切换下拉菜单。 单击列表项时,下拉菜单应该可见,并且在第二次单击时切换回来。
问题:如果我喜欢在下拉菜单中使用搜索栏,下拉菜单会切换回搜索栏内的不可见点击。
jquery:
$('.has-dropdown-two').on('click', function() {
$(this).toggleClass('is-active').children('ul').toggleClass('is-visible');
});
首先,我尝试创建一个 if 子句,例如:
if ($(this).hasClass('nav-dropdown-two') ) ..
不工作...然后我检查了console.log(this),它看起来像单击ul 它具有与单击li 时相同的输出。
我做了一个很简单的预览:
$('.has-dropdown-two').on('click', function() {
var $this = $(this);
$(this).toggleClass('is-active').children('ul').toggleClass('is-visible');
});
.has-dropdown-two > .menu-link { display: inline-block; }
.has-dropdown-two.is-active > .nav-dropdown-two {
display: block;
}
.nav-dropdown-two {
display: none;
position: absolute;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<li class="menu-item has-dropdown-two"> <a href="javascript:void(0);" class="menu-link stopnewline">Search</a>
<ul class="nav-dropdown-two menu">
<div class="search-container">
<form action="">
<input type="text" name="search">
<button type="submit">search</button>
</form>
</div>
</ul>
</li>
根据lumio的解决方案编辑:
$('.has-dropdown-two').on('click', function(event) {
if ( event.target.tagName === 'A' || event.target.tagName === 'I' ) {
$(this).toggleClass('is-active').children('ul').toggleClass('is-visible');
}else{
return;
}
});
【问题讨论】:
-
对您的问题进行一些澄清。点击UL确实会触发LI的点击,因为LI封装了UL。 LI 内部的一切都被认为是触发了 LI 的点击事件。暂时没时间找解决办法,如果以后还没有解决,我再研究一下。
标签: javascript jquery css