项目中自己写下拉框时,常常会有这样的需求;
点击下拉框时,下拉框里面的内容显示;
点击除了下框之外的其他地方,下拉框要关闭;
我是这样写的
<div class="select-wrap">
<div class="select-span">
<span>选择一个</span>
</div>
<ul class="select-list">
<li>1111111111</li>
<li>2222222222</li>
<li>3333333333</li>
</ul>
</div>
//点击打开点击关闭
$(".select-wrap .select-span").click(function(){
$(".select-wrap .select-list").slideToggle();
});
//下拉框里面的选中事件
$(".select-wrap .select-list li").on('click', function (e) {
e.stopPropagation();
$(this).parents('.select-wrap').find('span').html($(this).html());
$(this).parents('.select-wrap').find('.select-list').slideUp();
$(".select-wrap1 .select-list").slideDown('fast', 'swing');
})
//点击空白处,下拉框消失的代码
$(document).click(function(e) {
var target = $(e.target);
if(target.closest(".select-wrap").length == 0) {
$(".select-wrap .select-list").slideUp();
};
});
上面这样写看着没什么问题,但是如果有两个一样的下拉框,(一摸一样,包括类名,通过循环创建的,不确定会有多少个这样的下拉框)
<div class="select-wrap">
<div class="select-span">
<span>选择一个</span>
</div>
<ul class="select-list">
<li>1111111111</li>
<li>2222222222</li>
<li>3333333333</li>
</ul>
</div>
<div class="select-wrap">
<div class="select-span">
<span>选择一个</span>
</div>
<ul class="select-list">
<li>1111111111</li>
<li>2222222222</li>
<li>3333333333</li>
</ul>
</div>
这样就会有问题;
请问各位大佬,平时都是怎么写这个需求的啊…
这个简单,你把下拉菜单和点击选项写在同一个父级元素中,给父级元素添加点击事件就好了