javascript - Jquery .autocomplete 不工作

标签 javascript jquery autocomplete

我有一个 jquery 自动完成功能,它什么也没做。我使用了 here. 中的代码它在他们的示例中有效。

有一些变化...首先,数组是从 viewModelList 创建的,它可以工作。这是它的一小部分:

               var suburbs = [
       {
           id: "17023",
           suburb: "Epsom",
           postCode: "3551",
           state: "VIC"
       },
       {
           id: "17024",
           suburb: "Muskerry",
           postCode: "3557",
           state: "VIC"
       }

我已努力使用消息来指示响应 - 它是什么但即使消息也不起作用...我什至无法获得响应值..

我在消息的表单下方创建了一个 div,它们已经使用点击功能进行了测试。我确实在“#Suburbs”ID 上尝试了“.change”功能,但也一无所获。

代码如下:

    <script>
    (function ($) {
        $(function () {

            var suburbs = [
       @for (var i = 0; i < Model.SuburbAndPostcodesList.Count; i++) {
           <text>{
           id: "@Model.SuburbAndPostcodesList[i].SuburbsAndPostcodesId",
           suburb: "@Model.SuburbAndPostcodesList[i].Suburb",
           postCode: "@Model.SuburbAndPostcodesList[i].PostCode",
           state: "@Model.SuburbAndPostcodesList[i].State.ShortName"
       }@(i == Model.SuburbAndPostcodesList.Count - 1 ? "" : ",")</text>
       }
            ];



            $("#Suburb").autocomplete({
                source: function (req, responseFn) {
                    addMessage("search on: '" + req.term + "'<br/>");
                    var re = $.ui.autocomplete.escapeRegex(req.term);
                    var matcher = new RegExp("^" + re, "i");
                    var a = $.grep(suburbs, function (item , index) {
                        //addMessage("&nbsp;&nbsp;sniffing: '" + item + "'<br/>");
                        return matcher.test(item.suburb);
                    });
                    addMessage("Result: " + a.length + " items<br/>");
                    responseFn(a);
                },

                select: function (value, data) {
                    if (typeof data == "undefined") {
                        addMessage('You selected: ' + value + "<br/>");
                    } else {
                        addMessage('You selected: ' + data.item.value + "<br/>");
                    }
                }
            });

            function addMessage(msg) {
                $('#msgs').append(msg);
            }
        });
    });

</script>

ID“#Suburb”是正确的,适用于简单版本的 .autocomplete。

编辑:这是 javascript 的页面代码。希望这就是您想要的。

      <script src="/lib/jquery/dist/jquery.js"></script>
    <script src="/lib/bootstrap/dist/js/bootstrap.js"></script>
    <script src="/js/site.js?v=EWaMeWsJBYWmL2g_KkgXZQ5nPe-a3Ichp0LEgzXczKo"></script>




<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
<script src="/lib/jquery-ui/jquery-ui.js"></script>
<script>
    (function ($) {
        $(function () {

            var suburbs = [
       {
           id: "17023",
           suburb: "Epsom",
           postCode: "3551",
           state: "VIC"
       },
       {
           id: "17024",
           suburb: "Muskerry",
           postCode: "3557",
           state: "VIC"
       },

...

       {
           id: "17055",
           suburb: "Bonnet Hill",
           postCode: "7053",
           state: "TAS"
       },
       {
           id: "17056",
           suburb: "Wellington Park",
           postCode: "7054",
           state: "TAS"
       }
            ];



            $("#Suburb").autocomplete({
                source: function (req, responseFn) {
                    addMessage("search on: '" + req.term + "'<br/>");
                    var re = $.ui.autocomplete.escapeRegex(req.term);
                    var matcher = new RegExp("^" + re, "i");
                    var a = $.grep(suburbs, function (item , index) {
                        //addMessage("&nbsp;&nbsp;sniffing: '" + item + "'<br/>");
                        return matcher.test(item.suburb);
                    });
                    addMessage("Result: " + a.length + " items<br/>");
                    responseFn(a);
                },

                select: function (value, data) {
                    if (typeof data == "undefined") {
                        addMessage('You selected: ' + value + "<br/>");
                    } else {
                        addMessage('You selected: ' + data.item.value + "<br/>");
                    }
                }
            });

            function addMessage(msg) {
                $('#msgs').append(msg);
            }
        });
    });

</script>

EDIT2:这是 div 元素“suburb”,因为我认为查看自动完成功能可能是个好主意。

<div class="form-group">
        <label class="col-md-2 control-label" for="Suburb">Suburb:</label>
        <div class="col-md-10">
            <input class="form-control" type="text" data-val="true" data-val-required="A suburb name is required" id="Suburb" name="Suburb" value="Eaglehawk" />
            <span class="text-danger field-validation-valid" data-valmsg-for="Suburb" data-valmsg-replace="true" />
        </div>
    </div>

最佳答案

好的,有几件事:

首先:您的 jQuery .ready() 函数根本没有运行。您正在结合几种速记和高级技术,但它们不起作用。 (在下面的评论中有更多详细信息)在您可以做一些研究并记下概念之前,最好使用手写方法,然后就可以了

$(document).ready(function() {
});

其次:当您执行 $('#Suburb') 时,这意味着您必须在文档中的某个位置有一个带有 id="Suburb" 的元素。你的输入没有那个。

第三:您要返回的a 数组是您的自动完成无法识别的对象数组。您要么需要返回字符串数组,要么返回以下格式的对象数组:{ label: "Choice1", value: "value1"} 。完成此操作的最简单方法是将 .map 添加到您现有的代码中,紧跟在 .grep 之后:

        source: function (req, responseFn) {
            addMessage("search on: '" + req.term + "'<br/>");
            var re = $.ui.autocomplete.escapeRegex(req.term);
            var matcher = new RegExp("^" + re, "i");
            var a = $.grep(suburbs, function (item , index) {
                return matcher.test(item.suburb);
            });
            a = $.map(a, function(x){
                return x.suburb;
            });
            addMessage("Result: " + a.length + " items<br/>");
            responseFn(a);
        },

话虽如此,我已经对您的代码进行了一些修改(做出一些假设),这是一个有效的 fiddle .抱歉,当你添加你的 fiddle 时,我已经开始制作我自己的 fiddle 了。继续使用我创建的 fiddle 比修改你的 fiddle 更容易。

关于javascript - Jquery .autocomplete 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36530780/

相关文章:

javascript - 如何对比例进行关键帧动画并从 webGL 立方体的 anchor 旋转?

javascript - 打开 AI 示例代码不起作用 "Await is only valid in async functions and the top level bodies of modules"

javascript - 如何在 X 个字符后剪切字符串?

javascript - 根据浏览器宽度和高度定位图像

c++ - 如何让 YouCompleteMe 突出显示错误和警告?

Javascript : pattern to avoid global variables

php - 如何防止用户更改 Chrome 中检查元素的 id

javascript - 从文件夹动态创建 img 元素

python - Vscode 自动完成功能不适用于 Jupyter Notebook

javascript - Angular.js - Google 自动完成事件触发时清除文本框?