項(xiàng)目中自己寫下拉框時(shí),常常會(huì)有這樣的需求;
點(diǎn)擊下拉框時(shí),下拉框里面的內(nèi)容顯示;
點(diǎn)擊除了下框之外的其他地方,下拉框要關(guān)閉;
我是這樣寫的
<div class="select-wrap">
<div class="select-span">
<span>選擇一個(gè)</span>
</div>
<ul class="select-list">
<li>1111111111</li>
<li>2222222222</li>
<li>3333333333</li>
</ul>
</div>
//點(diǎn)擊打開點(diǎn)擊關(guān)閉
$(".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');
})
//點(diǎn)擊空白處,下拉框消失的代碼
$(document).click(function(e) {
var target = $(e.target);
if(target.closest(".select-wrap").length == 0) {
$(".select-wrap .select-list").slideUp();
};
});
上面這樣寫看著沒什么問題,但是如果有兩個(gè)一樣的下拉框,(一摸一樣,包括類名,通過循環(huán)創(chuàng)建的,不確定會(huì)有多少個(gè)這樣的下拉框)
<div class="select-wrap">
<div class="select-span">
<span>選擇一個(gè)</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>選擇一個(gè)</span>
</div>
<ul class="select-list">
<li>1111111111</li>
<li>2222222222</li>
<li>3333333333</li>
</ul>
</div>
這樣就會(huì)有問題;
請問各位大佬,平時(shí)都是怎么寫這個(gè)需求的啊…
偽代碼document.body.addEventListener("click",hideSelect,{once:true})
2.在下拉框點(diǎn)擊事件處理函數(shù)(就在上面那坨代碼下寫就行) 和 下拉框彈出的內(nèi)容上的點(diǎn)擊事件處理函數(shù) 里面添加阻止冒泡
偽代碼e.stopPropagation
這應(yīng)該算簡單的了吧
我還是覺得用select簡單粗暴?
參考下實(shí)現(xiàn)的代碼~~~
在點(diǎn)擊下拉以及選擇item時(shí)阻止事件冒泡
然后為body添加一個(gè)click監(jiān)聽,當(dāng)事件能冒泡到body時(shí),關(guān)閉所有的pop下拉框
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
width: 100vw;
height: 100vh;
padding: 0;
margin: 0;
}
.action-bar{
position: absolute;
left:0;
top:0;
width: 100%;
height: 50px;
background-color: lightgreen;
display: flex;
justify-content: flex-start;
align-items: center;
}
.select-wrap{
width: 100px;
height: 100%;
box-sizing: border-box;
padding-top: 5px;
padding-bottom: 5px;
position: relative;
padding-right: 10px;
padding-left: 10px;
position: relative;
}
.select-span{
width: 100%;
height: 100%;
border-radius: 5px;
border: 1px solid #cccccc;
box-sizing: border-box;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
.select-list{
display: none;
position: absolute;
left: 10px;
top: 50px;
width: 100px;
list-style: none;
padding: 5px;
margin: 0;
border: 1px solid red;
}
.select-wrap.active ul.select-list{
display: block;
}
ul.select-list{
list-style: none;
}
ul.select-list li{
background-color: grey;
background-color: grey;
margin-bottom: 5px;
overflow: hidden;
cursor: pointer;
}
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script>
$(function(){
$(".select-wrap .select-span").on("click",function(event){
$('body').find(".select-wrap").removeClass("active");
$(this).parents(".select-wrap").toggleClass("active");
event.stopPropagation();
addCloseAllSelectPopListener();
});
$(".select-wrap ").on("click","ul.select-list li",function(event){
console.log($(this).text()+" selected ");
$('body').find(".select-wrap").removeClass("active");
event.stopPropagation();
});
function addCloseAllSelectPopListener(){
$('body').on("click",function closeEventListener(event){
$('body').find(".select-wrap").removeClass("active");
$(event.currentTarget).off("click",closeEventListener);
});
}
});
</script>
</head>
<body>
<div class="action-bar">
<div class="select-wrap">
<div class="select-span">
<span>選擇一個(gè)</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>選擇一個(gè)</span>
</div>
<ul class="select-list">
<li>1111111111</li>
<li>2222222222</li>
<li>3333333333</li>
</ul>
</div>
</div>
</body>
</html>
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。