关于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 相关文章推荐
javaScript parseInt字符转化为数字函数使用小结
Nov 05 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
Apr 02 Javascript
JQuery 中几个类选择器的简单使用介绍
Mar 14 Javascript
图片上传插件jquery.uploadify详解
Nov 15 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
Jan 13 Javascript
jquery取消选择select下拉框示例代码
Feb 22 Javascript
js+CSS实现弹出居中背景半透明div层的方法
Feb 26 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
Dec 02 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
May 02 Javascript
Vue 中axios配置实例详解
Jul 27 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
Apr 24 Javascript
Electron实现应用打包、自动升级过程解析
Jul 07 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循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
PHP字符串与数组处理函数用法小结
2020/01/07 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
pycharm 使用心得(四)显示行号
2014/06/05 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
python常用函数与用法示例
2019/07/02 Python
Python assert语句的简单使用示例
2019/07/28 Python
Django自带日志 settings.py文件配置方法
2019/08/30 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
自荐书4要点
2014/01/25 职场文书
教师远程培训感言
2014/03/06 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
寒山寺导游词
2015/02/03 职场文书
请假条应该怎么写?
2019/06/24 职场文书
Python图片验证码降噪和8邻域降噪
2021/08/30 Python