javascript - 使 JQuery 自动完成始终显示特定选项

标签 javascript jquery html ajax autocomplete

我正在使用 JQuery(1.9.1) 自动完成下拉列表。我希望用户在下拉列表中键入系统名称,并在用户添加字符时更新下拉列表。我还希望无论用户输入什么字符,默认值“其他”始终出现在下拉列表的顶部。下面是它应该是什么样子的屏幕截图:enter image description here

这是我的 ajax 调用:

        $.ajax({
                type: 'POST'
                , url: '/test/get_BackendSystems'
                , dataType: 'json'
                , success: function (response) {
                    if (response.success) {
                        backend_systems = [];
                        $.each(response.backend_systems, function (id,system_object) {
                            backend_systems.push(system_object["system"]);
                        });
                    }
                    $("#BackEnd").autocomplete({
                        source: backend_systems,
                        open: function(){
                            $(this).data("autocomplete").menu.element.addClass("backend_dropdown");
                            $('.backend_dropdown').prepend('<li class="ui-menu-item" role="menuitem"><a class="ui-corner-all ui-add-new" tabindex="-1">Other</a></li>');
                            $('.backend_dropdown').width(432);
                        }
                    });
                }
            }
        );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

这是相应的html:

                            <div class='referral wrapper'>
                                <input list="POS_options" name="data[Account][backend_system]" type="text" class="required" placeholder="Back-End System" maxlength="150" id="BackEnd">
                            </div>

这个下拉菜单看起来是我想要的方式,除非我从下拉菜单中单击“其他”,我在 chrome 控制台中收到此错误,并且“其他”不会填充输入文本框:“未捕获类型错误:无法读取属性'数据” '未定义”。单击其他选项效果很好。

有人知道我做错了什么或者有其他方法来获得这种类型的下拉菜单吗?我怀疑这个问题与自动完成与前置的交互有关,因为除了“其他”之外的所有选项都工作正常。如果除了 jquery 自动完成之外还有其他方法可以做到这一点,我也愿意尝试。

最佳答案

我会尝试在定义数组的位置添加“其他”选项,如下所示:

    $.ajax({
            type: 'POST'
            , url: '/test/get_BackendSystems'
            , dataType: 'json'
            , success: function (response) {
                if (response.success) {
                    backend_systems = ["Other"];
                    $.each(response.backend_systems, function (id,system_object) {
                        backend_systems.push(system_object["system"]);
                    });
                }
                $("#BackEnd").autocomplete({
                    source: backend_systems,
                    open: function(){
                        $(this).data("autocomplete").menu.element.addClass("backend_dropdown");
                        $('.backend_dropdown').width(432);
                    }
                });
            }
        }
    );

我还删除了前缀 li 元素

关于javascript - 使 JQuery 自动完成始终显示特定选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41474200/

相关文章:

javascript - 使用嵌套对象重新排列数组(JS)

jquery - 远程数据: result object with different attributes.如何映射?

jquery - 在 jQuery 中添加类在 IE9 中不起作用

javascript - 为什么空的 200 在 jQuery 中会导致失败?

jquery - margin 底部 100% 和 margin 顶部 -100% 不起作用

html - 将子元素定位在 z-index 大于其父元素的元素之上

javascript - 在 Blaze 模板中访问对象的属性名称

javascript - 如何从 PeopleCode 关闭窗口?

JavaScript:如何在执行条件的特定持续时间后清除间隔

javascript - 从 Shadow DOM 获取元素