Javascript 选择2-使用预加载选项创建ajax

Javascript 选择2-使用预加载选项创建ajax,javascript,jquery-select2,Javascript,Jquery Select2,我有一个相当简单的需求集,但我一辈子都不知道如何通过Select2实现它 我想在页面上输入一些信息 用户可以在其中键入以触发AJAX调用 它还显示了一个预加载的选项列表,用户可以单击这些选项而不是键入来触发AJAX 如果关闭(模糊)输入,然后再次打开它,那么之前加载的AJAX响应应该仍然显示(而不是选项为空,您必须开始键入以再次加载它们) 我可以做#1和#2(当然也可以做#1和#3!),但我无法在一个输入字段中获得所有三个需求。我没有找到任何办法 实际上,为了实现#3,我想我正在寻找一种方法,将

我有一个相当简单的需求集,但我一辈子都不知道如何通过Select2实现它

  • 我想在页面上输入一些信息
  • 用户可以在其中键入以触发AJAX调用
  • 它还显示了一个预加载的选项列表,用户可以单击这些选项而不是键入来触发AJAX
  • 如果关闭(模糊)输入,然后再次打开它,那么之前加载的AJAX响应应该仍然显示(而不是选项为空,您必须开始键入以再次加载它们)
  • 我可以做#1和#2(当然也可以做#1和#3!),但我无法在一个输入字段中获得所有三个需求。我没有找到任何办法

    实际上,为了实现#3,我想我正在寻找一种方法,将我的短名单注入通常由ajax返回的选项中,并使用类似#4的内容来确保在打开字段时不会清除这些选项

    是否有办法初始化Select2字段的选项(通常加载Ajax)?我尝试过传递
    数据
    但不起作用,我尝试过使用initSelection,直到我意识到这不相关,我尝试过各种方法,但都没有用

    希望这是可能的,我只是错过了一个选择的地方


    顺便说一下,我已经阅读了堆栈上的几个线程,它们的标题与此类似,但它们似乎都没有回答这个问题。如果我错过了重要的一个,就告诉我

    如果您使用Select2的
    query
    选项,而不是
    ajax
    选项,我认为您可以做到这一点。这样,如果输入了任何字符,就可以发出ajax请求,但是如果没有输入字符,就显示默认列表

    如果您的默认选项定义如下:

    var DEFAULT_OPTIONS = [
        { id: 'def1', text: 'Default Choice 1' },
        { id: 'def2', text: 'Default Choice 2' },
        { id: 'def3', text: 'Default Choice 3' }
    ];
    
    您可以执行以下操作:

    var lastOptions = DEFAULT_OPTIONS;
    
    $('#select').select2({
        minimumInputLength: 0,
        query: function(options) {
            if (options.term) {
                $.ajax({
                    type: 'post', // Or 'get' if appropriate
                    url: 'your_ajax_url',
                    dataType: 'json',
                    data: {
                        term: options.term // Change name to what is expected
                    },
                    success: function(data) {
                        lastOptions = data;
                        options.callback({ results: data });
                    }
               });
            } else {
                options.callback({ results: lastOptions });
            }
        }
    });
    

    你是个天才:)这看起来很有前途。我只需要弄清楚如何将一个相当复杂且分页的select2.ajax调用转换为$.ajax调用@caponica-我以前从未使用过Select2的分页功能。我想我应该试着扩展我上面的答案来支持分页,这就是我的想法:你当然知道你的select2!我已经得到了这项工作,它的反应足够的没有分页了。当需要对这个(或任何其他select2字段)进行分页时,我将更详细地检查您的小提琴。非常感谢您的跟进!