Удаление выбранного элемента в select2 без обновления val () - PullRequest
0 голосов
/ 30 января 2020

У меня есть элемент управления вводом, использующий в качестве множественного выбора select2

 <input class="form-control no-padding cTagID" tabindex="3" id="cTagID" name="cTagID" style="border:none;" />

Я преобразую его в select2 и получаю данные из ajax, как показано ниже

 $("#cTagID").select2({
            placeholder: "Select a Tag",
            allowClear: true,
            width: '100%',
            multiple: true,
            maximumSelectionSize: 9,
            escapeMarkup: function (text) { return text; },
            minimumInputLength: 0,
            ajax: {
                url: '@Url.Action("myaction", "mycontroller")',
                dataType: 'json',
                quietMillis: 0,
                cache: false,
                type: "POST",
                data: function (term, page) {
                    return {
                        q: term,
                        page: page,
                        listType: "mytype",
                        Searchterms: $("#iProjectId").val()
                    };
                },
                results: function (data, page) {
                    var more = (page * 30) < data.total_count; // whether or not there are more results available
                    return {
                        results: $.map(data.items, function (item) {
                            return {
                                text: item.text,
                                id: item.id
                            }
                        }),
                        more: more
                    }
                },
                cache: true
            }
        }).on("change", function () {

            $(this).valid();
            alert($("#cTagID").val()) // Problem is here ..Even if a selected item is removed by user it will still be available in val
        });

Ajax фильтр вызовов и pagination et c работает нормально, и я получаю данные в формате ниже

{ 
   "total_count":6905,
   "items":[ 
      { 
         "id":"(DB-227)-Q14-SL03        ",
         "text":"(DB-227)-Q14-SL03         ~ E_ELOOP                  "
      },
      { 
         "id":"(DB-227)-Q14-SL04        ",
         "text":"(DB-227)-Q14-SL04         ~ E_ELOOP                  "
      },
      { 
         "id":"011100-727               ",
         "text":"011100-727                ~ E_OTP                    "
      },

   ]
}

Проблема заключается в том, что если пользователь выберет элемент, а затем удалит его, он останется как val ("#cTagID"). val () вернет удаленный элемент также

1 Ответ

0 голосов
/ 10 февраля 2020

После исследования сценария Select2. js. Я обнаружил, что select2 обрезает поле id при отображении выбранного элемента. Но значение остается без полей. Поэтому при удалении выбранного элемента select2 пытается удалить элемент с обрезанным идентификатором. но не найдет его, так как он не соответствует ни одному значению.

Примечание: всегда лучше использовать усеченное значение для Id в вашем источнике данных, если его строка перед присвоением select2

...