javascript - JQuery 自动完成将项目添加到呈现的下拉菜单

标签 javascript jquery ajax jquery-ui jquery-autocomplete

我想知道是否有任何方法可以在已呈现的下拉自动完成菜单中附加新项目。

我想做的是使用ajax从服务器获取固定数量的结果,并在最后显示“显示更多...”链接。如果选择,此链接应启动另一个 ajax 查询并在同一下拉列表中加载更多项目。

有道理吗?我也不确定我是否想得太多,并且有一种更简单的方法来执行相同的任务。

编辑 1

我目前拥有的代码与此类似:

$(function () {
        $("#srchOperator").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: "someURL",
                    type: "POST",
                    dataType: "JSON",
                    data: JSON.stringify(somePostData),
                    success: function (data) {
                        response($.map(data), function(item) {
                            return {
                                label: item.fields['op'],
                                id: item._id
                            }
                        });
                        var totalResults = data.total
                        if (totalResults - 10 > 0) {
                            $('.ui-autocomplete').append('<li ' +
                                    'class=ui-menu-item><a ' +
                                    'href="#">(' + (totalResults - 10) +
                                    ' more...)</a></li>');
                        }
                    },
                });
            },
            minLength: 2,
        })
    });

第一个 ajax 调用将仅检索 10 个元素,“更多”链接应执行 ajax 调用,在其回调中将项目附加到下拉列表中。

最佳答案

按照您的方式,您可以使用 CSS 隐藏其余部分。

.ui-autocomplete li:nth-of-type(1n+10) {
   display: none;
}

.ui-autocomplete li.moreResults {
   display: block;
}

链接的 Javascript 如下所示:

$('.moreResults').click(function(){
   $('.ui-autocomplete li').show();
});

请注意,我为链接添加了一个类,以区别于常规项目。如果在声明此函数后创建链接,则需要使用 on 函数,例如:

$(document).on('click','.moreResults',function(){
   $('.ui-autocomplete li').show();
});

这应该可以解决问题。顺便说一句,我个人会重组它,只获取您最初需要的结果,因为它会加载得更快,并在您单击更多时加载下一组。

关于javascript - JQuery 自动完成将项目添加到呈现的下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33177838/

相关文章:

javascript - 在 Javascript 中替换 "with '

javascript - 到底是什么让使用 React 进行更新比常规 UI 更新更快?

javascript - 使用 jQuery 防止 ajax 加载页面上的脚本执行

java - 访问ajax成功回调函数的响应数据

jquery - 如何使用 video.js 播放()从 JQuery 注入(inject) load() 的 <video> ?

javascript - 如何用 moment.js 减去 2 次,然后减去一些分钟

javascript - 在 TypeScript 中为 'export' 赋值意味着什么?

jquery - 从多个列表框中选择时如何获取当前选定的选项值

javascript - MySQL/PHP/jQuery - 查询问题

javascript - 我的 scrollTop() jQuery 方法在滚动后挂起浏览器