点击搜索框空消失怎么会突然不显示了

点击搜索框空消失怎么会突然不显示了

http://img1.sycdn.imooc.com//climg/5f33473f09caab2712830832.jpg




(function(window,document){

     //定义一个方法

     const  methods  = {

        appendChild(parent,...children){

            children.forEach(el=>{

                parent.appendChild(el);

            })

        },

        $(selector,root=document){

            return root.querySelector(selector);

        },

        $$(selector,root=document){

            return root.querySelectorAll(selector);

        }

      

     }


      //D

     let D = function(option){

        //事件

       this._ck();

       this.el  = methods.$('.sel');

       this.lia = methods.$$('li',this.el);

       this.lis();

       this.bod = methods.$('body');

       this._non(this.el);

       console.log(this.bod)

     }

       

    //搜索框点击事件

    D.prototype._ck = function(){

       methods.$('.symbol').addEventListener('click',(e)=>{

             e.stopPropagation();

            if(this.el.style.display!=="block"){

                this.el.style.display="block";

            }else{

                this.el.style.display="none";

            }


          

       })

         

    }


    //点击空白消失

    D.prototype._non = function(e){

        document.onclick = function () {


            e.style.display = "none";

            

            }

       

    }

    

    //选择Li的值给输入框

    D.prototype.lis = function(){

        //遍历Li

        

        var that = this;

        that.inl =  methods.$('.searcT');

        that.input =  methods.$('.search');

        that.ser =  methods.$('.sel');

        that.elt = []

        this.lia.forEach((el,index)=>{

            el.onclick = function(){

            that.input.value = el.innerText;

            that.ser.style.display="none";

          }


          that.elt.push(el.innerText);

        })


        //拿到输入的值

        that.inl.addEventListener('input',()=>{

            let arr2 = this.inl.value;

            //if(that.elt.includes(arr2)){

                

            //}         

           })

           that.elt.forEach((el,index)=>{

           

         })

    }


 

  

    window.$D = D;   

})(window,document)

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>自定义下拉框</title>

  <link rel="stylesheet" href="./index.css">

</head>

<body>

  <div class="container">

    <div class="title">自定义下拉框</div>

    <div class="box">

    <input type="text" class="search" placeholder="未选择" disabled >

    <div class="symbol">∨</div>

    <div class="sel">

      <input type="text" class="searcT" placeholder="搜索" >

      <b>构建工具</b>

      <ul>

        <li>Babel</li>

        <li>Webpack</li>

        <li>Rollup</li>

      </ul>

      <b>前端框架</b>

      <ul>

        <li>Vue</li>

        <li>React</li>

        <li>Augest</li>

      </ul>

    </div>

   </div>

  </div>

   <script src="data.js"></script>

   <script src="index.js"></script>

   <script>

     

     const d = new $D(

        

     )

   </script>

</body>


</html>

  * {

    margin: 0;

    padding: 0;

    list-style-type: none;

    

  }

  body{

    width:100%;

    height:100%;

  }


  .container {

    position: relative;

     text-align: center;

     width:100%;

     height:500px;

     display: flex;

     flex-direction: column;

     justify-content: center;

     align-items: center;

   

  }


  .title {

    font-size: 30px;

    color: aqua;

  }


  .search {

    border:1px solid #666;

    margin-top: 30px;

    width: 300px;

    height: 30px;

    outline: none;

    border-radius: 5px;

    padding-left:10px;

    

  }

  

  .box{

    position: relative;

  }

  .symbol{

    position: absolute;

    width:50px;

    height:32px;

    right:0px;

    top:30px;

    background-color:blue;

    color:white;

    border-radius: 5px;

    line-height: 34px;

    cursor:pointer;

  }

  

  .sel{

     position: absolute;

     width:300px;

     height:200px;

     border:1px solid black;

     border-radius: 5px;

     overflow-y:scroll;

     text-align: left;

     display: none;

    

   

  }

  .searcT{

    margin:1px 1px 1px 1px;

    width:270px;

    height:26px;

    border-radius: 5px;

    border:1px solid #666;

    padding-left:5px;

  


  }

  .sel b{

    margin-left: 5px;

  }

  .sel ul  li{

    font-size:14px;

    text-indent: 20px;

  }

  .sel ul li:hover{

    background-Color:red;

  }

  我想点击空白处消失,结果点击 里面搜索框也会消失了。是冒泡的原因吗

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,思路是可以的哦。祝学习愉快~

好帮手慕夭夭 2020-08-12 10:47:04

同学你好,理解的没错,是冒泡的影响。document表示整个文档, 即点击页面任意地方都会触发document的点击事件。这里可以给输入框绑定点击事件,然后阻止冒泡。参考如下:

http://img1.sycdn.imooc.com//climg/5f33582109c3888006590336.jpg

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 小杨同学呀 #1
    还有一个问题 就是 搜索框输入关键字然后筛选的问题,是不是要先获取到输入框的值,跟获取到的li的数组,把这两个作为参数 传入到一个函数里,然后通过fiter这个方法去检测
    2020-08-12 10:51:34
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师