【问题标题】:Jquery autocomplete fire on enter keypress输入按键时Jquery自动完成触发
【发布时间】:2012-05-24 05:18:16
【问题描述】:

我正在使用 Jquery UI 自动完成功能,效果很好,但我正在尝试解决这个问题,希望能得到一些帮助。自动完成在 asp 面板内的文本框上,按 Enter 键的表单上的默认行为是提交表单。如果用户在自动完成文本框中输入内容并按 Enter,我希望自动完成 Web 服务启动并在 Enter 上返回结果。我在网上阅读我想处理自动完成的 Keypress 事件,我一直在尝试但不确定如何调用自动完成以触发按键,如果有人知道如何做到这一点,我将在下面显示我的代码请通过代码中的示例显示,因为我在使用正确的语法来调用按键上的函数时遇到问题,感谢您的帮助,这里是代码。

//Attach autocomplete to txtCity so user can lookup SPLCS by cities

        var city;
        var txtCity = $("[id$=txtAutoCity]")
        $(txtCity).autocomplete({
            source: function (request, response) {
                request.term = request.term.replace(/[^a-zA-Z\s]+/, "")
                $.ajax({
                    url: "../../Services.asmx/GetOfficesByCity",
                    data: "{ 'city': '" + request.term + "' }",
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    dataFilter: function (data) { return data; },
                    success: function (data) {
                        response($.map(data.d, function (item) {

                            if (data.d != undefined) {
                                return {
                                    value: item.Display,
                                    result: item.CommaDelimited
                                }

                            }
                            else {
                                return true;
                            }
                        }))
                    },

                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert(errorThrown);
                    }
                });
            },
            autoFill: false,
            minLength: 2,
            delay: 800,
            mustMatch: false,
            selecFirst: false,
            select: function (event, ui) {
                var selectedObj = ui.item;
                if (ui.item) {
                    city = ui.item.result.split(',')[0];

                    $("[id$=txtCity]").val(ui.item.result.split(',')[0]);
                    $("[id$=txtOffice]").val(ui.item.result.split(',')[1]);
                    $("[id$=txtDistrict]").val(ui.item.result.split(',')[2]);


                }
            },
            // Any action to be performed once the auto complete list closes
            close: function (event) {

            }
        }).keypress(function (e) {
            if (e.keyCode === 13) {
                //How to cancel default submit behaviour of form and call this
                //autocomplete function to fire??   
                e.preventDefault();
                //my_search_function($(txtCity).val())
            } 
        });

【问题讨论】:

    标签: jquery asp.net jquery-ui jquery-plugins


    【解决方案1】:

    要解决此问题,您可以在自动完成中添加 search 属性和新变量,步骤如下:

    • 创建一个新变量(var canPass = false);
    • 在自动完成中添加 search 属性;
    • 在按键事件中触发搜索功能;

    所以,结果是:

    //将自动完成附加到txtCity,以便用户可以按城市查找SPLCS

        var canPass = false;
        var city;
        var txtCity = $("[id$=txtAutoCity]")
        $(txtCity).autocomplete({
            source: function (request, response) {
                request.term = request.term.replace(/[^a-zA-Z\s]+/, "")
                $.ajax({
                    url: "../../Services.asmx/GetOfficesByCity",
                    data: "{ 'city': '" + request.term + "' }",
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    dataFilter: function (data) { return data; },
                    success: function (data) {
                        response($.map(data.d, function (item) {
    
                            if (data.d != undefined) {
                                return {
                                    value: item.Display,
                                    result: item.CommaDelimited
                                }
    
                            }
                            else {
                                return true;
                            }
                        }))
                    },
    
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert(errorThrown);
                    }
                });
            },
            autoFill: false,
            minLength: 2,
            delay: 800,
            mustMatch: false,
            selecFirst: false,
            select: function (event, ui) {
                var selectedObj = ui.item;
                if (ui.item) {
                    city = ui.item.result.split(',')[0];
    
                    $("[id$=txtCity]").val(ui.item.result.split(',')[0]);
                    $("[id$=txtOffice]").val(ui.item.result.split(',')[1]);
                    $("[id$=txtDistrict]").val(ui.item.result.split(',')[2]);
    
    
                }
            },
            // Any action to be performed once the auto complete list closes
            close: function (event) {
    
            },
            search: function (value, event) {
                if (!canPass) {
                   event.preventDefault();
                }
                else {
                   canPass = false;
                }
            },
        }).keypress(function (e) {
            if (e.keyCode === 13) {
               canPass = true;
               $(txtCity).autocomplete("search", ($txtCity).val());
            }
        });
    

    因此,使用此代码,您的自动完成功能会在您按 ENTER 时开始搜索。

    【讨论】:

    • 这是完美的工作。我花了很多时间寻找可行的解决方案。
    【解决方案2】:

    您需要在自动完成对象上触发 search 功能。

    ($txtCity).autocomplete( "search", "TheSearchValueToSend" )
    

    更多信息请访问Jquery Doco Site

    【讨论】:

    • 非常感谢 Leon 我能够按照您的建议做到这一点 (txtCity).autocomplete("search", txtCity.val())
    【解决方案3】:

    请查看已接受的答案,忽略以下内容

    首先,我建议恕我直言,您正在以错误的方式思考这个问题。自动完成的概念是让用户继续输入,直到答案完全解决(或从给定的选项中选择他们想要的选项,顺便说一句,这可以通过箭头键来选择,用 ENTER 选择结果)。

    也就是说,如果您真的想覆盖 ENTER 行为,我建议您通过“keydown”单独执行此操作,而不是作为自动完成小部件的一部分。下面的 jsFiddle 你应该知道要看什么:http://jsfiddle.net/2Z25f/

    亲切的问候,

    toepoke.co.uk

    【讨论】:

    • 我理解默认行为是从下拉结果中选择一个条目,但用户抱怨如果他们快速输入全名,然后按 Enter 没有任何反应,自动完成的结果不是这就是为什么我想在用户输入内容并按下回车键时触发自动完成功能,至少他们可以看到与他们输入的内容相似的自动完成结果,否则什么也不会发生。
    • 抱歉,误解了你的目的。我将编辑我的帖子,以便清楚地看到已接受的答案。
    猜你喜欢
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2014-08-31
    • 1970-01-01
    相关资源
    最近更新 更多