zoukankan      html  css  js  c++  java
  • Typeahead的使用总结

    Typeahead是Bootstrap的自动补全JS插件。

    最近项目中用到,总结一下。

    与autocomplish类似,通过ajax实现,实现流程是前台输入关键字,后台根据关键字查询出信息,构造json串并返回,前台接收显示。

    实例一

    HTML代码:

     <input type="text" class="form-control" id="employee_name" name="employee_name" data-provide="typeahead" placeholder="" autocomplete="off" disableautocomplete />
    <input name="employee_id" type="hidden" value="" />

    PHP部分代码:

        $suggestions = array();
        $i=0;
        $q = strtoupper($query);
        $sql = "SELECT employee_id,employee_name from employee as e where upper(e.employee_name) like '$q%'"; 
    $data = $conn->getAll($sql)
    foreach($data as $key=>$val) {
    $suggestions[$i] = $val['name'];
    $data[$i]['employee_id'] = $val['employee_id'];
    $i++;
    }
    $ar = array('query'=>$query,'suggestions'=>$suggestions,'data'=> $data);
    echo json_encode( $ar);

    目的就是拼接json字符串,要求返回的格式类似:

    {"query":"m","suggestions":["Mafei","MMFF"],"data":[{"employee_id":"1","name":"Mafei"},{"employee_id":"4","name":"MMFF"}]}

    当输出m,查询出来的关键词是"Mafei","MMFF",选中一个后要将对应的id放到隐藏的文本框中,因为实际数据库中保存的是supplier_id。

    JS代码:

                            $('#employee_name').keyup(function(){
                                $('#employee_id').val(0);
                            }).typeahead({
                                source: function (query, process) {
                                    var parameter = {query: query};
                                    $.get('ajax-typeahead.php?type=employee&profile=13', parameter, function (result) {
                                        var result = eval("(" + result + ")");
                                        var data = result.data;
                                        objects = [];
                                        map = {};
                                        $.each(data, function(i, object){
                                            map[object.name] = object;
                                            objects.push(object.name);
                                        });
                                        process(objects);
                                    });
                                },
                                updater: function(item){
                                    $('#employee_id').val(map[item].employee_id);
                                    return item;
                                }
                            });

     

    注意事项:

    updater的意思是每次从关键词列表中选中值执行的操作。目的是获得每个employee_name对应的id.

    实例二

    有时页面中要多次使用typeahead。

    如果有一个表格,每行中都有一个单元格要求值是从自动补全中获得的。

                            $('.typeahead').each(function(){
                                var aa = $(this);
                                aa.typeahead({
                                    source: function (query, process) {
                                        var parameter = {query: query};
                                        $.get('ajax-typeahead.php?type=supplier', parameter, function (result) {
                                            var result = eval("(" + result + ")");
                                            var data = result.data;
                                            labels = [];
                                            mapped = {};
                                            $.each(data, function(i, item){
                                                mapped[item.name] = item.supplier_id;
                                                labels.push(item.name);
                                            });
                                            process(labels);
                                        });
                                    },
                                    updater: function(item){
                                        aa.nextAll(".supplier_id").val(mapped[item]);
                                        return item;
                                    }
                                })
                            })

    参考:bootstrap 2.3 typeahead使用ajax补全输入框的方法

  • 相关阅读:
    31款简单实用的CSS+JS下拉菜单脚本
    POWERDESIGNER 15 反向生成PDM[转]
    WCF异常信息
    下载文件
    分区表的维护 ORA14402 更新分区关键字列
    [转]Winform框架之字典数据管理
    用例图(User Case)
    datetime的时值
    JS date对象的减法处理
    JS获取当前页面的高度
  • 原文地址:https://www.cnblogs.com/mafeifan/p/3754848.html
Copyright © 2011-2022 走看看