2017-01-24 3 views
0

Я использую Select2 builtin AJAX для загрузки крошечного списка элементов. Select2 загружает весь список при первом выборе (хорошо), но перезагружает канал JSON каждый раз, когда пользователь пытается изменить свой выбор или тип, чтобы фильтровать элементы (а это означает, что новый запрос AJAX для каждой введенной буквы!).Сделать выбор2 выборки данных только один раз

В A request is being triggered on every key stroke, can I delay this? мы можем прочитать:

По умолчанию Выбор2 запустит новый запрос AJAX, когда пользователь изменяет свой слово для поиска. Вы можете установить лимит времени для отладки запросов с использованием опции ajax.delay.

$('select').select2({ 
    ajax: { 
     url: '/example/api', 
     delay: 250 
    } 
}); 

Это приведет к тому, что Select2 будет ждать 250 миллисекунд перед отправкой запроса в ваш API.

... но это не так. Шутки в сторону. Я также пробовал недокументированное свойство minimumInputLength, показанное на примерах, но, похоже, ничего не делает.

Возможно ли даже сделать выборки Select2 только один раз?

+0

Я полагаю, что библиотека просто не предназначена для работы именно так. –

ответ

0

Это работает для меня. Я протестировал его с большой задержкой: delay: 3000 Повторение AJAX действительно задерживается на 3 секунды после последнего нажатия клавиши. Он также работает при удалении символов с помощью клавиши backspace. Я использую select2.full.js v4.0.3. Надеюсь это поможет.

0

Позвольте мне знать, если это решение будет работать для вас:

1) связывают действие OnChange для вашего выбора элемента:

 <select name="variable" onChange="loadyourlist($('option:selected',this).val());"> 
      <option value="#">Select State</option> 
      <option value="1">State 1</option> 
     </select> 

2) Сделайте свой запрос внутри функции loadyourlist, но проверьте, если он был вызван до:

 window.called = 0; //initial state 

     function loadyourlist(value){ 
      if(!window.called){ //not called before 
       //make your ajax call 
       window.called = 1; //increment to avoid furter calls 
      } 
     } 
Смежные вопросы