下拉多選checkbox
阿新 • • 發佈:2019-02-20
- 本文原創,轉載請註明出處
今天根據要求讓實現下拉列表加入多選按鈕,之前寫過百度搜索效果,但是感覺不太適用。然後大概想了一下就動手開始試著去寫,實現效果如下圖:
(注:選中下拉多選框之後點選輸入框及下拉以外的地方隱藏下拉。依賴JQuery,為了寫的方便些。)
CSS程式碼
定義一些樣式:
<style>
ul li{
list-style: none;
}
.hide{display: none}
.width150{
width: 150 px;
}
.width150 input[type="text"]{
width: 100%;
height: 32px;
border: 1px solid #ccc;
border-radius: 4px;
padding-left: 12px;
}
.width150 ul{
width: 96%;
padding: 0 0 0 20px;
margin: 0;
border: 1 px solid #ccc;
}
.width150 li{
padding: 5px;
}
.width150 li+li{
border-top: 1px solid #ccc;
}
</style>
HTML程式碼
定義輸入框和顯示下拉的ul:
<form id="form">
<div class="width150">
可多選年份:<input type="text" id="yearInput " placeholder="請選擇年份" readonly>
<ul id="yearId" class="hide">
</ul>
</div>
</form>
JS程式碼
定義json資料、獲取checkbox選中內容等:
<script>
(function(){
var str = '';
var arr = {
0 : {name:'2015',id:0},
1 : {name:'2016',id:0},
2 : {name:'2017',id:0}
};
for (let x in arr){
console.info(x);
str += `<li><label><input type="checkbox" value="${arr[x].id}" data-name="${arr[x].name}">${arr[x].name}</label></li>`;
}
$('#yearId').html(str);
})();
$("#yearInput").click(function(){
$(this).attr('placeholder','');
var name = '';
$('#yearId input').each(function () {//迴圈遍歷checkbox
var check=$(this).is(':checked');//判斷是否選中
if(check){
name += $(this).attr('data-name')+',';
$(this).attr('name',"yearId");
}else {
$(this).attr('name',"");
}
});
$("#yearInput").val(name.slice(0,-1));//去除最後的逗號
});
$("#yearId").mouseover(function() {
if (!$("#yearId").hasClass('hover')){//類hover在下面用來驗證是否需要隱藏下拉,沒有其他用途。
$("#yearId").addClass('hover');
}
}).mouseout(function(){
$("#yearId").removeClass('hover');
});
$(document).on('click',function() {
if (!$("#yearInput").is(":focus") && !$("#yearId").hasClass('hover')) {//如果沒有選中輸入框且下拉不在hover狀態。
var name = '';
$('#yearId input').each(function () {//遍歷checkbox
var check = $(this).is(':checked');//判斷是否選中
if (check) {
name += $(this).attr('data-name') + ',';
$(this).attr('name', "yearId");
} else {
$(this).attr('name', "");
}
});
$("#yearInput").val(name.slice(0, -1));//去除最後的逗號
$("#yearId").addClass('hide');
} else {
$("#yearId").removeClass('hide');
}
});
</script>
上面程式碼input輸入框顯示的是資料的name,要是需要把id傳到後端,就把checkbox的value傳出去,可以用$(“#form”).serialize();獲取選中的checkbox。
要想下拉有滾動條,設定一下 ul樣式:
.width150 ul{
width: 96%;
padding: 0 0 0 20px;
margin: 0;
border: 1px solid #ccc;
height: 100px;
overflow-y: scroll;
}
全部程式碼
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>下拉多選</title>
<script src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
<style>
ul li{
list-style: none;
}
.hide{display: none}
.width150{
width: 150px;
}
.width150 input[type="text"]{
width: 100%;
height: 32px;
border: 1px solid #ccc;
border-radius: 4px;
padding-left: 12px;
}
.width150 ul{
width: 96%;
padding: 0 0 0 20px;
margin: 0;
border: 1px solid #ccc;
}
.width150 li{
padding: 5px;
}
.width150 li+li{
border-top: 1px solid #ccc;
}
</style>
</head>
<body>
<form id="form">
<div class="width150">
可多選年份:<input type="text" id="yearInput" placeholder="請選擇年份" readonly>
<ul id="yearId" class="hide">
</ul>
</div>
</form>
<script>
(function(){
var str = '';
var arr = {
0 : {name:'2015',id:0},
1 : {name:'2016',id:0},
2 : {name:'2017',id:0}
};
for (let x in arr){
console.info(x);
str += `<li><label><input type="checkbox" value="${arr[x].id}" data-name="${arr[x].name}">${arr[x].name}</label></li>`;
}
$('#yearId').html(str);
})();
$("#yearInput").click(function(){
$(this).attr('placeholder','');
var name = '';
$('#yearId input').each(function () {//迴圈遍歷checkbox
var check=$(this).is(':checked');//判斷是否選中
if(check){
name += $(this).attr('data-name')+',';
$(this).attr('name',"yearId");
}else {
$(this).attr('name',"");
}
});
$("#yearInput").val(name.slice(0,-1));//去除最後的逗號
});
$("#yearId").mouseover(function() {
if (!$("#yearId").hasClass('hover')){//類hover在下面用來驗證是否需要隱藏下拉,沒有其他用途。
$("#yearId").addClass('hover');
}
}).mouseout(function(){
$("#yearId").removeClass('hover');
});
$(document).on('click',function() {
if (!$("#yearInput").is(":focus") && !$("#yearId").hasClass('hover')) {//如果沒有選中輸入框且下拉不在hover狀態。
var name = '';
$('#yearId input').each(function () {//遍歷checkbox
var check = $(this).is(':checked');//判斷是否選中
if (check) {
name += $(this).attr('data-name') + ',';
$(this).attr('name', "yearId");
} else {
$(this).attr('name', "");
}
});
$("#yearInput").val(name.slice(0, -1));//去除最後的逗號
$("#yearId").addClass('hide');
} else {
$("#yearId").removeClass('hide');
}
});
</script>
</body>
</html>