項目中自己寫下拉框時,常常會有這樣的需求;
點擊下拉框時,下拉框里面的內(nèi)容顯示;
點擊除了下框之外的其他地方,下拉框要關(guān)閉;
我是這樣寫的
<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>
//點擊打開點擊關(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');
})
//點擊空白處,下拉框消失的代碼
$(document).click(function(e) {
var target = $(e.target);
if(target.closest(".select-wrap").length == 0) {
$(".select-wrap .select-list").slideUp();
};
});
上面這樣寫看著沒什么問題,但是如果有兩個一樣的下拉框,(一摸一樣,包括類名,通過循環(huán)創(chuàng)建的,不確定會有多少個這樣的下拉框)
<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>
這樣就會有問題;
請問各位大佬,平時都是怎么寫這個需求的啊…
偽代碼document.body.addEventListener("click",hideSelect,{once:true})
2.在下拉框點擊事件處理函數(shù)(就在上面那坨代碼下寫就行) 和 下拉框彈出的內(nèi)容上的點擊事件處理函數(shù) 里面添加阻止冒泡
偽代碼e.stopPropagation
這應(yīng)該算簡單的了吧
我還是覺得用select簡單粗暴?
參考下實現(xiàn)的代碼~~~
在點擊下拉以及選擇item時阻止事件冒泡
然后為body添加一個click監(jiān)聽,當事件能冒泡到body時,關(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>選擇一個</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>
</div>
</body>
</html>北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領(lǐng)域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。