zoukankan      html  css  js  c++  java
  • 原生实现搜索框既可以下拉框选择也可以输入搜索,输入的时候有自动填充提示

    需求描述

    项目中有很多列表页面,都有搜索功能,新增需求:所有的搜索框既可以输入搜索,也可以下拉框选择,且输入框输入的时候有相应的提示填充,如图所示:

    代码实现

    首先实现输入功能,查了很多资料,最终决定在搜索框覆盖一个Input框

    
    <div class="select-editable">
          <select id="qwindyear_id" class="read" onchange="change('qwindyear_id')">
                      <option value="0">年</option>
           </select>
            <input type="text" name="" value="" placeholder="选择年份" id='year_sel' autocomplete="off" onchange="inputChange('qwindyear_id','year_sel')">
     </div>
    


    布局有了,接下来就是实现功能,输入的时候自动填充,因为项目中有做过类似功能,引入的插件是bootstrap中的typeahead.js

    插件使用方法

    只用了基本的方法实现功能,代码如下:

    var years = [];
    var years = [];
    for(var i = year; i >= 2010; i--){
         years.push(i+'年');
    }
    $('#year_sel').typeahead({
         source: years
    })
    

    这样就实现了边输入边提示的效果。

    可以输入,可以搜索,但是点击搜索,后台请求数据的时候需要传参的是id项,也就是传的不是2017年,而是2017。
    如图:

    提交数据的时候只需要传选中的val()就好了。
    下拉框可以实现搜索,输入的话要传参的话有两种方法:
    1、在输入时选择某一项,将它的id放在界面上(可以用隐藏域),那么绑定数据源的时候就要绑定对象数组,而不是单纯的数组了
    2、在输入时选择某一项,遍历一遍下拉框中的选项,某一项等于option的text时,将下拉框的这一项选中
    我用的是第二种方法

    难点实现

    封装了一个方法,只要input框内的内容改变了,就执行以下代码,下拉框赋值

    
    function inputChange(selname,inputname){
        if($('#'+inputname).val()){
            var option = $('#'+selname+' option');
            for(var i=0;i<option.length;i++){
                if($('#'+inputname).val() == $(option[i]).text()){
                    $('#'+selname).val($(option[i]).val());
                }
            }
        }
    }
    

    同时用下拉框选中的时候也要将选中的内容赋值给input框,因为Input框不赋值的话是空的,就算后面selected有选中,也没有显示出来。

    
    function change(name){
        $('#'+name).siblings('input').val($('#'+name).find('option:selected').text());
    }
    

    以上就是实现效果的全过程~~~~~

  • 相关阅读:
    BlockingQueue
    序列化存取数据库(spring+mybatis+oracle) 以及可能会遇到的数据库取出的数据反序列化失败问题
    关于junit不抛出异常
    关于ByteArrayInputStream、ByteArrayOutputStream 和 ObjectInputStream、ObjectOutputStream
    sc delete mysql命令执行失败
    python中的值传递和引用传递
    flask实现模仿知乎
    协程和装饰器完成简易计算器
    微信JSAPI支付接口,支付完成后关闭当前窗口
    Java关键字transient和volatile小结
  • 原文地址:https://www.cnblogs.com/llff123/p/8399569.html
Copyright © 2011-2022 走看看