• JavaScript实现模糊推荐的input框(类似百度搜索框)


    如何用JS实现一个类似百度搜索框的输入框呢,再填充完失去焦点时,自动填充配置项,最终效果如下图:

    实现很简单,但是易用性会上升一大截,需要用到的有jquery-ui的autocomplete,jquery的keyup事件,以及ajax与服务端的交互。

    废话少说直接上代码:

    引用,需要jquery-ui和jquery:

    <link rel="stylesheet" href="/static/plugins/jqueryui1/jquery-ui-autocomplete.css">
    <link rel="stylesheet" href="/static/plugins/jqueryui1/jquery-ui-1.7.1.css">
    <script src="/static/plugins/jQuery/jQuery-2.1.4.min.js"></script>
    <script src="/static/plugins/jQueryUI/jquery-ui.min.js"></script>

    html输入框的设计,一个文本输入框和一个隐藏输入框:

    <span class="bd_DW_checkbox_left_10">路径:</span>
    <span>
        <input type="text" id="path" class="bd_DW_input_len_350">
        <input type="hidden" id="hidden_path" class="bd_DW_input_len_350"/>
    </span>

    js代码中实现:

    1、autocomplete自动填充

    2、keyup事件

    3、ajax与后端交互

    简单来说:

    1、文本输入框的每次键入,触发一个keyup事件;

    2、事件的处理方式是向后端请求模糊推荐的项items,这里的返回数据结果是:

    {
      "errno": 0;
      "data": ["path1", "path2" ... "pathN"]      
    }

    3、autocomplete自动填充hidden输入框,其余的事情jquery-ui会为你处理好;

    4、当你点选完成,或者是输入完成后,path框失去焦点(blur事件)的时候,会从后端请求数据,自动填充好各个输入框add_field。

    具体代码如下:

    function time_path_select() {
        //定义新数组
        var path_data = [];
        var _path_data = [];
    
        $("#time_path").autocomplete({
            source: _path_data
        });
    
        $("#time_path").keyup(
            function(event){
                var path=$("#time_path").val();
                if(path.length>0){
                    var data_dict = send_get("/paths?path=" + path)
                    var data = data_dict['data'];
    
                    var len = data.length;
                    for(var i=0;i<len-1;i++){
                        path_data[i]=data[i];
                    };
                    $("#hidden_path").val(path_data);
                    var _data=$("#hidden_path").val().split(",");
                    for(var j=0;j<_data.length;j++){
                        _path_data[j]=_data[j];
                    }
                }
            }
        );
    }
    function send_get(url) {
    var json_data = "";
    $.ajax({
    type:"get",
    url:url,
    datatype:"json",
    async: false,
    error: function() {
    pop_window("请求数据失败");
    },
    success:function(data) {
    //json_data = $.parseJSON(data);
    json_data = data;
    },
    });
    return json_data;
    }
    function pop_window(message) {
    layer.alert(message, {
    skin: 'layui-layer-lan',
    closeBtn: 0
    });
    }
    function add_field() {
    $('#time_path').blur(function(){
    var path = $('#time_path').val();
    var json_data = send_get('/time_config_item?path=' + path);
    if (json_data != {}) {
    $("#time_buffer_time").val(json_data['buffer_time']);
    $("#time_task_name").val(json_data['item_name']);
    $("#time_email").val(json_data['owner_email']);
    $("#time_phone").val(json_data['owner_phone']);
    $("#time_owner").val(json_data['owner']);
    $("#bd_DW_monitor_status_select").val(json_data['status']);
    var cron_config = json_data['cron_config'];
    var list = cron_config.split(':');
    if (list[0] == '*') {
    $('#bd_DW_monitor_type_select').val('hour');
    }
    else {
    $('#bd_DW_monitor_type_select').val('day');
    }
    $("#time_hour").val(list[0]);
    $("#time_minute").val(list[1]);
    }
    });
    }
     
  • 相关阅读:
    让windows cmd也用上linux命令
    数据库工具toad与plsql
    Oracle表&DATA复制
    主流WEB开发语言简单对比
    游戏中的碰撞检测
    LRU算法总结及其C算法实现
    MTU
    多款as3游戏框架
    请问2.3e+71,是不是表示23后面有70个0?
    希望OFFICE有一个小阳台,在阳光斜照的下午,开发人员能喝着茶,在蓝色的天空下讨论问题,这样思绪更为清楚
  • 原文地址:https://www.cnblogs.com/kangoroo/p/6349567.html
Copyright © 2020-2023  润新知