原生js实现select下拉框选择

最近在做一个项目需要兼容到ie不同版本,在使用select时遇到了各种问题。后来索性就自己使用原生js实现了这样一个下拉框,话不多说,直接上代码吧。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义select</title>
</head>
<style>
    *{
        margin: 0;
        padding: 0;
    }
    #main{
        position: relative;
        width: 280px;
        height: 42px;
    }
    #content{
        width: 280px;
        height: 42px;
        line-height: 42px;
        padding-left: 10px;
        background: rgb(255, 255, 255);
        border-radius: 2px;
        border: 1px solid rgb(221, 221, 221);
        font-size: 16px;
        font-family: MicrosoftYaHei;
        color: rgb(51, 51, 51);
        cursor: pointer;
    }
    #selectImg{
        position: absolute;
        top:13px;
        right: 10px;
        cursor: pointer;
    }
    #selectItem{
        display: none;
        border: 1px solid #eee;
        width: 290px;
    }
    #selectItem ul{
        list-style: none;
    }
    #selectItem ul li{
        height: 30px;
        line-height: 30px;
        padding-left: 10px;
        cursor: pointer;
    }
    #selectItem ul li:hover{
        background-color:#f5f7fa;
    }
</style>
<body>
    <div id="main">
        <div id="content">

        </div>
        <img id="selectImg" src="./icon_select.png" alt="">
        <div id="selectItem">
        <!--    <ul>
                <li data-value="1">北京</li>
                <li data-value="2">上海</li>
                <li data-value="3">深圳</li>
            </ul>-->
        </div>
    </div>

</body>
<script>
    var data = [{name:'北京',value:'1'},{name:'上海',value:'2'},{name:'广州',value:'3'}]
    var content = document.getElementById('content');
    var selectImg = document.getElementById('selectImg');
    var selectItem = document.getElementById('selectItem');

    var ul = document.createElement('ul');
    selectItem.appendChild(ul);
    for(var i = 0; i < data.length; i++){
        var li = document.createElement('li');
        li.setAttribute('data-value',data[i].value);
        li.innerText = data[i].name;
        ul.appendChild(li);
    }
    /**
     * 点击下拉箭头
     */
    selectImg.onclick = function () {
        console.log(selectItem.style.display);
        if(selectItem.style.display == 'none' || selectItem.style.display == ''){
            selectItem.style.display = 'block';
        }else{
            selectItem.style.display = 'none';
        }

    }

    content.onclick = function () {
        if(selectItem.style.display == 'none' || selectItem.style.display == ''){
            selectItem.style.display = 'block';
        }else{
            selectItem.style.display = 'none';
        }
    }

    var lis = selectItem.getElementsByTagName('li');
    for(var i = 0; i < lis.length; i++){
        lis[i].onclick = function () {
            console.log(this.innerHTML,this.getAttribute('data-value'));
            content.innerText = this.innerHTML;
            selectItem.style.display = 'none';
        }
    }
</script>
</html>

效果图

  • 6
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值