关于layui的下拉搜索框异步加载数据的解决方法


Posted in Javascript onSeptember 28, 2019

思路分析:当我使用layui默认的下拉搜索框的时候,layui会默认渲染出一个HTML结构,所以我把渲染出来的这个结果直接给复制出来,这样css的样式就不用从头到尾写一遍了,

前端代码(我用的是jsp):

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
  <link rel="stylesheet" href="statics/css/font.css" rel="external nofollow" >
  <link rel="stylesheet" href="statics/css/xadmin.css" rel="external nofollow" >
</head>
<body>
<form class="layui-form" action="">
 

      <div class="layui-inline">
        <label class="layui-form-label">搜索选择框</label>
        <div class="layui-input-inline">
             <div class="layui-form-select layui-form-selected searchDiv">
              <div class="layui-select-title"><input type="text" placeholder="直接选择或搜索选择" value="" class="layui-input search_input" id="search_input"></div>
              <dl class="layui-anim layui-anim-upbit" style="display: block;">
                <!-- <dd lay-value="" class="layui-select-tips layui-this">直接选择或搜索选择</dd> -->
              <!--   <dd lay-value="1" class="layui-this">layer</dd>
                <dd lay-value="2" class="">form</dd>
                <dd lay-value="3" class="">layim</dd> -->
              <!--   <dd lay-value="4" class="">element</dd>
                <dd lay-value="5" class="">laytpl</dd>
                <dd lay-value="6" class="">upload</dd>
                <dd lay-value="7" class="">laydate</dd>
                <dd lay-value="8" class="">laypage</dd>
                <dd lay-value="9" class="">flow</dd>
                <dd lay-value="10" class="">util</dd>
                <dd lay-value="11" class="">code</dd>
                <dd lay-value="12" class="">tree</dd>
                <dd lay-value="13" class="">layedit</dd>
                <dd lay-value="14" class="">nav</dd>
                <dd lay-value="15" class="">tab</dd>
                <dd lay-value="16" class="">table</dd>
                <dd lay-value="17" class="">select</dd>
                <dd lay-value="18" class="">checkbox</dd>
                <dd lay-value="19" class="">switch</dd>
                <dd lay-value="20" class="">radio</dd> -->
              </dl>
            </div>
        </div>
      </div>
   
    <div class="layui-form-item">
  <div class="layui-input-block">
   <button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button>
   <button type="reset" class="layui-btn layui-btn-primary">重置</button>
  </div>
 </div>
</form>

 <script src="statics/lib/layui/layui.js" charset="utf-8"></script>
<script>
layui.use(['form', 'jquery','layer'], function(){
 var form = layui.form
  var $=layui.$;
  var layer=layui.layer;
  var oldValue=null;
  
  $(".search_input").keyup(function(event){
    //alert(event.keyCode)
    //layer.msg(event.keyCode);
    if(event.keyCode==40){   //方向健↓
    //如果是最后一个则不用做任何事情
    if($(this).parent().next("dl").children(":last").hasClass("layui-this")){
      return;
    }
      $(this).parent().next("dl").find("dd.layui-this").removeClass("layui-this").next("dd").addClass("layui-this");
      $dl=$(this).parent().next("dl");
      $dl.scrollTop($dl.scrollTop()+$dl.find("dd.layui-this").height());
      return;
    }
      
    if(event.keyCode==38){ //方向健↑
      //如果是第一个则不用做任何事情
      if($(this).parent().next("dl").children(":first").hasClass("layui-this")){
        return;
      }
      $(this).parent().next("dl").find("dd.layui-this").removeClass("layui-this").prev("dd").addClass("layui-this");
      $dl=$(this).parent().next("dl");
      $dl.scrollTop($dl.scrollTop()-$dl.find("dd.layui-this").height());
      return;
    }
      
    if(event.keyCode==13){     //按回车键给文本框赋值
      $(this).val($(this).parent().next("dl").find("dd.layui-this").html());
      oldValue=$(this).val().trim();
      return;
    }
    
    if(oldValue!=$(this).val().trim()){ //如果输入框的值没有改变就没必要发送ajax请求
      //根据用户输入的内容发送ajax请求查询以此内容开头的商品简码,从而查出符合要求的商品名字
      $.get("product/getProductsByCode",{"productCode":$(this).val()},function(data){
            if(!!data){
              //清除掉以前的值
              $(".searchDiv dl.layui-anim").html("");
              for(var i=0;i<data.length;i++){

                $(".searchDiv").find("dl.layui-anim").append("<dd lay-value=\""+data[i].productId +"\" οnclick=\"changeSearchText(this)\">"+data[i].productName+"</dd>");
                $(".searchDiv").find("dl.layui-anim").children("dd:first").addClass("layui-this");
              }
              //重新渲染select
              //form.render('select');
            }
          },'json')
    }
  })


 
    form.on('submit(formDemo)',function(){
      return false;  //这样的做的目的是因为里面有文本输入看,当我们按回车键的时候会默认提交表单,所以要进行此操作
    })
});

function changeSearchText(obj){
  document.getElementById("search_input").value=obj.innerHTML;
}
</script>

</body>
</html>

后台代码我就不贴了,我是认为后台没有必要贴了

以上这篇关于layui的下拉搜索框异步加载数据的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
function, new function, new Function之间的区别
Mar 08 Javascript
JavaScript学习点滴 call、apply的区别
Oct 22 Javascript
javascript之typeof、instanceof操作符使用探讨
May 19 Javascript
js实现网页自动刷新可制作节日倒计时效果
May 27 Javascript
js 操作符汇总
Nov 08 Javascript
Google 地图获取API Key详细教程
Aug 06 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
Apr 10 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
Jan 11 Javascript
详解Vue webapp项目通过HBulider打包原生APP
Jun 29 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
Aug 24 Javascript
浅谈vuex为什么不建议在action中修改state
Feb 02 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
Feb 15 Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 #Javascript
layui下拉列表select实现可输入查找的方法
Sep 28 #Javascript
解决layui下拉框监听问题(监听不到值的变化)
Sep 28 #Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
Sep 28 #Javascript
layer.confirm()右边按钮实现href的例子
Sep 27 #Javascript
layer页面跳转,获取html子节点元素的值方法
Sep 27 #Javascript
使用layer模态框给新页面传值的方法
Sep 27 #Javascript
You might like
php实现httpclient类示例
2014/04/08 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
PHP可变函数学习小结
2015/11/29 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
js右键菜单效果代码
2007/07/21 Javascript
Firefox中autocomplete=&quot;off&quot; 设置不起作用Bug的解决方法
2011/03/25 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
js中document.write的那点事
2014/12/12 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
angular6开发steps步骤条组件
2019/07/04 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
原生js生成图片验证码
2020/10/11 Javascript
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
Python中的进程分支fork和exec详解
2015/04/11 Python
python 计算文件的md5值实例
2017/01/13 Python
python django 增删改查操作 数据库Mysql
2017/07/27 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
查询优化的一般准则有哪些
2015/03/08 面试题
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
成人大专生实习期的自我评价
2013/10/02 职场文书
搞笑婚前保证书
2015/02/28 职场文书
工作能力自我评价2015
2015/03/05 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
vue elementUI表格控制对应列
2022/04/13 Vue.js