jQuery模拟自动补全

jQuery有自己的自己的自动补全功能,基本原理都是一致的。
首先有一个父div用来放组件,其中包含输入框和和子div用来模拟下拉列表。ul数据列表。
   <div class="auto_div">
        <input type="text" class="auto_input" url-data="/json/nation.json"/>
        <div class="auto_list_div">
            <ul class="auto_ul">
            </ul>
        </div>
    </div>

内部input和div用position定位相对父div确定位置,给子div加高度和Y轴滚动条。

<style type="text/css">
        *{padding: 0;margin: 0;}
        .auto_div{position: absolute;border:3px grey solid;width:auto;padding: 20px;height:auto;}
        .auto_input{position: relative;}
        .auto_list_div{position: relative;border:2px rgb(227,228,228) solid;width:auto;height: 300px; overflow-y: scroll;}
        .auto_ul{padding: 5px;}
        .auto_ul li{width: auto;list-style: none;}
        .auto_ul li:hover{background-color: #eeeeee;font-weight: bold;}
        </style>

给输入框和子div绑定click、keyup、mouse事件

        $(".auto_div").mouseleave(function(){
          $(".auto_list_div").hide();
        });
        getVal();
        $(".auto_list_div").hide()
        $(".auto_input").on("click keyup",function(event){
            if(event.type="click"){
                $(".auto_list_div").show();
            }
            if(event.type="keyup"){
                var inval = $(".auto_input").val();
                getVal(inval);
            }
        });
    });

利用ajax动态获取数据源,

function getVal(inval){
        var url =$(".auto_input").attr("url-data"); 
        $.ajax({
            url:url,
            type:'post',
            dataType:'json',
            success:function(data){
                var nation = $("#hnation").val();
                var str1 = "";
                var str2 = "";
                $.each(data,function(k,v){
                    if(null!=inval&&undefined!=inval&&""!=inval.trim()&&v.name.indexOf(inval)>=0){
                            str1+="<li onclick='getComVal("+k+")' id="+v.ID+">"+v.name+"</li>";
                    }else{
                            str2+="<li onclick='getComVal("+k+")' id="+v.ID+">"+v.name+"</li>";
                    }
                });
                if(null!=inval&&undefined!=inval&&""!=inval.trim()){
                    $(".auto_ul li").remove();
                    $(".auto_ul").append(str1);
                }else{
                    $(".auto_ul li").remove();
                    $(".auto_ul").append(str2);
                }
            },
            error:function(XMLHttpRequest, textStatus, errorThrown){
                 alert(XMLHttpRequest.status);
                 alert(XMLHttpRequest.readyState);
                 alert(textStatus);
                 alert("查询数据失败!");
            }
        });
    }

将结果复制input。

    function getComVal(k){
        var val = $("#"+k).text();
        $(".auto_input").val(val);
        $(".auto_list_div").hide();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值