jq ui autocomplete的使用

例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
    <script src="//code.jquery.com/jquery-1.9.1.js"></script>
    <!--<script src="//code.jquery.com/jquery-1.11.2.js"></script>-->
    <script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
    <link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css">
</head>
<body>
<div style="text-align: center;margin-top: 20px">
    <input id="txtSearchKey" type="text" style="width:250px; height:30px;"/>
</div>
</body>
<style>
    .autocomplete-ul {
        /*max-height: 200px;*/
        overflow-y: scroll;
    }

    .autocomplete-ul li {
        margin: 2px;
        padding: 2px 5px;
        cursor: pointer;
        display: block;
        font-size: 14px;
        line-height: 20px;
        overflow: hidden;
    }

    .autocomplete-ul li .box p, .autocomplete-ul li .box div, .autocomplete-ul li .box a {
        overflow: hidden;
        white-space: nowrap;
        -o-text-overflow: ellipsis;
        text-overflow: ellipsis;
    }

    .autocomplete-ul li .box p {
        margin: 0;
    }

    /* firefox only */
    .autocomplete-ul li .box :not(p) {
        clear: both;
    }

    .autocomplete-ul li .box :not(p) a {
        float: left;
    }

    .autocomplete-ul li .box div:not(p):after {
        content: "...";
        float: left;
        color: #000;
    }

    .autocomplete-ul li:hover {
        background-color: rgb(195, 195, 195);
    }

    .autocomplete-ul .autocomplete_odd {
        background-color: #f6f6f6;
    }


</style>
<script>
    function autocomplete(id, param, callback) {
        //最小长度
        var minLength = 2;
        var autoFocus = false;
        //延迟 单位毫秒
        var delay = 500;
        //ul id
        var ulId = id + "Box";
        //ul 的高度
        var maxHeight = 200 + "px";
        //搜素框
        var obj = $("#" + id);
        //长度
        var width = obj.width();
        if (param) {
            // console.log(param)
            if (param.minLength) {
                minLength = param.minLength
            } else if (param.autoFocus) {
                autoFocus = param.autoFocus
            } else if (param.delay) {
                delay = param.delay;
            } else if (param.ulId) {
                ulId = param.ulId;
            } else if (param.maxHeight) {
                maxHeight = param.maxHeight + "px";
            } else {
                if (callback) {

                } else {
                    callback = param;
                }
            }
        }
        // console.log(callback)
        $.widget("ui.autocomplete", $.ui.autocomplete, {
            //渲染列表 ul
            _renderMenu: function (ul, items) {
                if (callback && callback.renderMenu) {
                    callback.renderMenu(ul, items, this)
                } else {
                    var that = this;
                    $.each(items, function (index, item) {
                        var li = that._renderItemData(ul, item);
                    });
                }
                $(ul).find("li:odd").addClass("autocomplete_odd");
                $(ul).css({"max-height": maxHeight})
            },
            //每列渲染li
            _renderItem: function (ul, item) {
                if (callback && callback.renderItem) {
                    callback.renderItem(ul, item)
                } else {
                    var li = $("<li>");
                    li.attr("title", item.title).append(item.label);
                    var html = "";
                    if (item.html) {
                        html = "<div class='box'>" + item.html + "</div>";
                    }
                    li.html(html);
                    return li.appendTo(ul);
                }
            },
            _resizeMenu: function () {
                if (callback && callback.resizeMenu) {
                    callback.resizeMenu(this.menu.element)
                } else {
                    this.menu.element.outerWidth(width);
                }
            }
        });
        $.fn.extend({
            //重写控件的id方法
            uniqueId: function () {
                return this.each(function () {
                    if (!this.id) {
                        this.id = ulId;
                    }
                });
            },
            //重写去掉控件的id方法
            removeUniqueId: function () {
                return this.each(function () {
                    if (ulId.test(this.id)) {
                        $(this).removeAttr("id");
                    }
                });
            }
        });
        obj.autocomplete({
            //搜索调用的函数
            source: function (k, fn) {
                // console.log(callback && callback.source)
                if (callback && callback.source) {
                    callback.source(k, fn);
                } else {

                }
            },
            //搜素选择回调
            select: function (event, ui) {
                // console.log(">>>>当智能提示框中任意一项被选中时发生,ui.item为选中的项。");
                // console.log(ui)
                if (callback && callback.select) {
                    callback.select(event, ui);
                } else {

                }
            },
            //在搜索完成后智能提示框显示前发生,可以在此事件中对显示项进行处理
            response: function (event, ui) {
                $("#" + ulId).show()
                // console.log(ui)
                // console.log(">>>>在搜索完成后智能提示框显示前发生,可以在此事件中对显示项进行处理");
                if (callback && callback.response) {
                    callback.response(event, ui);
                }

            },
            //如果输入域的值改变则触发该事件
            change: function (event, ui) {
                if (callback && callback.change) {
                    callback.change(event, ui);
                } else {

                }
            },
            minLength: minLength,
            autoFocus: autoFocus,
            delay: delay
        });
        obj.focus(function () {
            var ul = $("#" + ulId);
            if ($(this).val() == "") {
                ul.html();
            } else {
                ul.show()
            }
        });
        $("#" + ulId).addClass("autocomplete-ul");
    }
</script>
<script>
    var callback = {
        source: function (search, fn) {
            console.log(search)
            var data = [
                {
                    title: "anders",
                    value: "ok",
                    html: "<p>anderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonandersson</p><p>22233333</p>"
                }, {
                    title: "anders",
                    value: "ok1",
                    html: "<p>anderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonandersson</p><p>22233333</p>"
                }, {
                    title: "anders",
                    value: "ok2",
                    html: "<p>anderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonandersson</p><p>22233333</p>"
                }, {
                    title: "anders",
                    value: "ok3",
                    html: "<p>anderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonandersson</p><p>22233333</p>"
                }, {
                    title: "anders",
                    value: "ok4",
                    html: "<p>anderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonandersson</p><p>22233333</p>"
                }, {
                    title: "anders",
                    value: "ok5",
                    html: "<p>anderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonandersson</p><p>22233333</p>"
                }, {
                    title: "anders",
                    value: "ok6",
                    html: "<p>anderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonandersson</p><p>22233333</p>"
                }, {
                    title: "anders",
                    value: "ok7",
                    html: "<p>anderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonanderssonandersson</p><p>22233333</p>"
                }
            ];
            fn(data)
        }
    };
    autocomplete('txtSearchKey', callback);
</script>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用,autocomplete是element-ui的一个组件,用于处理模糊匹配的需求。用户可以输入一个单词,自动匹配到相关的内容。你可以在element-ui的官方网站上找到相关介绍和基本原理。 根据引用,在autocomplete的querySearch方法中可以实现以下内容: - 使用if-else判断是否希望在用户未输入内容时进行匹配。如果只希望在用户输入内容后才开始匹配,那么只需要保留if内的内容。 - 在cb()函数中输出返回的结果。具体返回的结果可以根据你的匹配方法决定,一般情况下会根据用户输入的字符返回匹配到的结果。但也可以根据需求进行自定义匹配。 - 实现原理是根据之前定义的list中的label和name字段进行处理。可以根据用户输入时按照name字段进行匹配,并返回label字段。这样可以实现中英文匹配的情况。需要注意的是,匹配结果中的value字段才会在页面上展示。如果你的list中没有value字段,页面上将不会展示内容。这也使得前端可以实现自定义展示。 根据引用,后端匹配不需要获取字典。你只需要将前端输入的字符传给后端,等待后端匹配完成后将结果返回给你,然后你再将结果返回到页面即可。querySearch和cb是固定格式,前者表示输入的字段,后者是一个方法,表示输出的结果。 综上所述,element-uiautocomplete组件可以实现缓存,具体实现方式根据你的需求和匹配方法的不同而定。123 #### 引用[.reference_title] - *1* *2* *3* [【element】el-autocomplete的常见用法](https://blog.csdn.net/qq_41443611/article/details/124320151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值