layui实现搜索下拉

下拉搜索

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Demo</title>
  <!-- 请勿在项目正式环境中引用该 layui.css 地址 -->
  <link href="https://unpkg.com/layui@2.9.23/dist/css/layui.css" rel="stylesheet">
</head>
<body>
<div class="layui-inline" style="width: 235px;">
  <input name="" placeholder="在输入框提供一些常用的选项" class="layui-input" id="ID-dropdown-demo-base-input">
</div>

  
<!-- 请勿在项目正式环境中引用该 layui.js 地址 -->
<script src="https://unpkg.com/layui@2.9.23/dist/layui.js"></script> 
<script>
layui.use(function(){
  var dropdown = layui.dropdown;
  // 绑定输入框
  dropdown.render({
    elem: '#ID-dropdown-demo-base-input',
    closeOnClick: false, // 不开启“打开与关闭的自动切换”,即点击输入框时始终为打开状态
    data: [{
      title: 'menu item 1',
      id: 101
    },{
      title: 'menu item 2',
      id: 102
    },{
      title: 'menu item 3',
      id: 103
    },{
      title: 'menu item 4',
      id: 104
    },{
      title: 'menu item 5',
      id: 105
    },{
      title: 'menu item 6',
      id: 106
    }],
    click: function(obj){
      this.elem.val(obj.title);
    },
    style: 'min-width: 235px;'
  });
});
</script>

</body>
</html>

在这里插入图片描述

搜索下拉框

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Demo</title>
  <link href="https://unpkg.com/layui@2.9.6/dist/css/layui.css" rel="stylesheet">
</head>
<body>
<div class="layui-inline layui-padding-5">
  <input name="" placeholder="请搜索或选择" class="layui-input" id="ID-dropdown-demo">
</div>
  
<script src="https://unpkg.com/layui@2.9.6/dist/layui.js"></script> 
<script>
layui.use(function(){
  var dropdown = layui.dropdown;
  var $ = layui.$;
  var inst = dropdown.render({
    elem: '#ID-dropdown-demo',
    data: [],
    click: function(obj){
      this.elem.val(obj.title);
      this.elem.attr('data-id', obj.id)
    }
  });

  /*
  应用场景 当在一个input输入框中输入要查询的数据 要做到实时查询
  首先想到input的事件 change blur keyup input propertychange
  change 是改变属性 包括value值,触发事件需要失焦但是value值不变化不触发
  input 事件 只是改变输入框的value值, ie6-ie8 是不支持input事件的
  所以ie有自带的事件 propertychange 这个跟input一样 值改变就触发 但是 edge不支持propertychange事件 edge支持input事件
  blur事件 失焦就会触犯 如果啥也不写只是光标进去然后出来还是会触发事件
  keyup看很多人使用这个事件 但是如果别人拷贝过来的值不通过键盘粘贴,这个事件是不触发的
  所以推荐用 input 和 propertychange两个事件同时使用
  */
  $(inst.config.elem).on('input propertychange', function() {
    var elem = $(this);
    //值改变了需要清除之前选择的数据
    var value = elem.val().trim();
    elem.removeAttr('data-id');
    console.log('改变值模拟获取数据');
    console.log(inst.config.id);
    
    var dataNew = mockData(value);
    dropdown.reloadData(inst.config.id, {
      data: dataNew
    })
  });

  $(inst.config.elem).on('blur', function() {
    //如果没有选择数据 则清空input输入的内容
    var elem = $(this);
    var dataId = elem.attr('data-id');
    if (!dataId) {
        elem.val('');
    }
  });
  
  function mockData(value) {
    //实际环境通过ajax请求获取数据
    return [
      {id: 1, title: value + '1'},
      {id: 2, title: value + '2'}
    ];
  }
});
</script>
 
</body>
</html>

在这里插入图片描述
在这里插入图片描述

参考

https://layui.dev/docs/2/dropdown/#reload
https://zhuanlan.zhihu.com/p/684733439

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值