簡體   English   中英

如何將值預加載到Select2控件中並仍然搜索遠程數據?

[英]How do I preload values into a Select2 control and still search remote data?

當我將值預加載到Select2下拉列表中時,展開控件以鍵入一個值。 它過濾預加載的值。 在文本框中鍵入文字時,如何配置Select2以進行Ajax調用(新搜索)? 如果我不將值預加載到Select2中,則ajax調用會起作用。 那我怎么都可以呢?

我將這樣的東西預加載到select2控件中:

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: url,
    data: json,
    dataType: "json",
    success: function (data, textStatus) {
        var json = JSON.parse(data.d);
        var arrData = [];
        if (json !== null && json !== undefined) {
            if (json.length > 0) {
                $.each(json, function (index, element) {
                    var item = { id: element.CommonName, text: element.CommonName, name: element.CommonName };
                    arrData.push(item);
                });
            }
        }
        $("[ID$=ddlDropDown]").select2({
            data: arrData
        });
    }
});

我用這個實例化我的Select2控件:

$("[ID$=ddlDropDown]").select2({
    ajax: {
        url: url,
        type: "POST",
        dataType: 'json',
        async: true,
        contentType: "application/json; charset=utf-8",
        delay: 500,
        data: function (params) {

                var query = {
                    searchString: (params.term || ""),
                    page: params.page
                }
                // Query paramters will be ?search=[term]&page=[page]
                return JSON.stringify(query);


        },
        processResults: function (data, page) {
            var json = JSON.parse(data.d);
            if (json != null) {
                if (json.length > 0) {
                    return {
                        results: $.map(json, function (item) {
                            return {
                                text: item.CommonName,
                                name: item.CommonName,
                                id: item.CommonName
                            }
                        })
                    };
                } else {
                    return false;
                }
            }
            else {
                return false;
            }

        },
        success: function (data, page) {
            $("[ID$=ddlDropDown]").select2("data", data, true);
        }
    },
    minimumInputLength: 2,
    placeholder: "Select a Value",
    disabled: false,
    cache: true
});

因為我遇到了這個問題並且找不到任何解決方案,所以我想分享一個我做過的解決方案。即使這是一個舊問題,目前還沒有得到解答。對其他人會有所幫助

      $('#select2').select2({
            allowClear: true,
            multiple: false,
      //    minimumInputLength: 3,
            ajax: {
                url: "url",
                dataType: 'json',
                delay: 250,
                type: 'POST',
                data: function (params) {
                    return {
                        q: params.term, // search term
                    };
                },
                processResults: function (data, container) {
                    return {
                        results: $.map(data, function (item) {
                            return {
                                text: item.title + '| <b>' + item.title_2 + '</b>',
                                id:  item.id,
                            }
                        })
                    };
                },
                cache: false
            },
            escapeMarkup: function (markup) {
                return markup;
            },
            placeholder: __('select.project_search'),
        }).live('change', function (e) {
           // on change code
         });

並且在您的控制器中,您可以檢查搜索項是否為null,然后返回預加載選項,否則運行SQL搜索數據或返回遠程數據。

訣竅是您必須注釋掉minimumInputLength

只要您單擊它,就會觸發select2 ajax。 並為您加載預加載,如下所示

在此處輸入圖片說明

當您搜索時,您將獲得像這樣的遠程結果 在此處輸入圖片說明

我希望這會幫助尋找解決方案的人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM