bootstrap用 juqery Autocomplete组件实现搜索框自动提示

  最近在项目中要用到搜索框自动提示的功能,看了之前另一个人写到一半的js,惨不忍睹,连我这种渣渣js水平都要吐槽他。于是自己查阅了一些博客实现了,不过是在公司的框架上实现的,自己后来又想在bootstrap的基础上实现,又写了一个小小demo,这里记录一下。

1.功能实现主要思路

首先,实现搜索框输入时自动提示,使用的一个关键是jquery中的keyup,我们来看看keyup函数在手册中的介绍

定义和用法
完整的 key press 过程分为两个部分,按键被按下,然后按键被松开并复位。
当按钮被松开时,发生 keyup 事件。它发生在当前获得焦点的元素上。
keyup() 方法触发 keyup 事件,或规定当发生 keyup 事件时运行的函数。
注释:如果在文档元素上进行设置,则无论元素是否获得焦点,该事件都会发生。
  个人对这段话的理解是按下键盘又松开也就是输入过程中就会触发keyup,所以对应到搜索框就是在搜索框输入的时候触发keyup,在具体触发代码里面添加ajax请求访问搜索接口获取搜索结果集动态显示就可以了。

  所以整个代码流程就是对搜索框的keyup事件进行监听,动态获取搜索结果集,显示在前端。知道了怎么触发自动提示,下面就是代码实现。

2.代码以及解释

先放一下代码:

<!DOCTYPE html>
<html>
<head>
    <title>搜索输入框demo</title>
    <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <style type="text/css">
      .ui-com {
        font-size: 14px;
        max-height: 100px;
        max-width: 172px;
        overflow-y: auto;
        /* 防止水平滚动条 */
        overflow-x: hidden;
      }
    </style>  
    <script src="//code.jquery.com/jquery-1.10.2.js"></script>  
    <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>  
</head>
<body>
<!-- input id="search_kw" type="text" name="myname" class="ui-autocomplete"></input>  -->
<nav class="navbar navbar-default" role="navigation">
    <div class="container-fluid"> 
    <div class="navbar-header">
        <a class="navbar-brand" href="#">搜索自动提示</a>
    </div>
    <div class="navform">
        <form class="navbar-form navbar-left" role="search">       
            <input id="search_kw" type="text" name="myname" class="form-control ui-com"  placeholder="请输入基金关键字">
        </form>
    </div>
    </div>
</nav>
</body>
<script type="text/javascript">
$(document).ready(function () {  
    (function(){  
        var insertOptions = function(data, id) {  
            var result = new Array();  
            $.each(data, function(i, item){  
                result.push(item.short_name);  
            });  
            //alert(result.toString()); 
            console.log(result.toString());
            $('#search_kw').autocomplete({  
                source: result  
            });  
        }  

        $('#search_kw').keyup(function(){  
            var right_id = "search_kw";  
            var url = "http://.....";  
            var skeyword = $("#search_kw").val();
                $.ajax({
                    url: url,
                    dataType: 'jsonp',
                    jsonp: "callback",
                    data: {"skeyword": skeyword},
                    success: function (data) {
                        insertOptions(data, right_id);
                    }

                });
        });  

    })();  
});  
</script>
</html>

  首先,引入boostrap,jquery和jquery-ui组件,注意顺序,jquery在bootstrap前引入,jquery-ui最后。

  这里提示下拉显示用$(‘#search_kw’).autocomplete({ source: result }); 这句话来实现,在jquery-ui里面已经封装好实现方法,直接调用就行啦,source参数这里放入结果集。

  当然,也可以自己试着实现下拉显示,大概就是将结果集用li拼接,然后显示,这里涉及到ul和搜索框相对位置的设置,笔者在bootstrap下设置相对位置总是失败,可能是和bootstrap的css冲突了,后面如果解决再放出来。

  最后来一张效果图:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值