解决layui的下拉搜索框异步加载数据的问题

思路分析:当我使用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">
    <link rel="stylesheet" href="statics/css/xadmin.css">
</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>

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值