2013-05-22 1 views
4

У меня есть следующий код:Выбор2: установить скрытое значение поля

<input type="hidden" name="airport" tabindex="6" /> 


$('input[name="airport"]', '#details-form').select2({ 
      minimumInputLength: 3, 
      multiple: true, 
      separator: ';', 
      width: 'off', 
      initSelection : function (element, callback) { 
       var data = []; 
       $(element.val().split(';')).each(function() { 
        data.push({id: this, text: this}); 
       }); 
       callback(data); 
      }, 
      ajax: { 
       url: History.getBasePageUrl() + 'get-airports-dictionary', 
       dataType: 'json', 
       data: function (term, page) { 
        return { 
         q: term 
        }; 
       }, 
       results: function (data, page) { 
        var code = parseInt(data[0]); 
        switch (code) { 
         case 0: 
          return {results: data[1]}; 
          break; 
         default: 
          window.Common.showError(data[1]); 
          break; 
        } 
       } 
      }, 
      formatResult: formatAirportResult, 
      formatSelection: formatAirportSelection 
     }); 

Все отлично работает до тех пор пока я хочу, чтобы установить существующие значения для этого поля - элемент аргумент внутри метода initSelection показывает пустое значение!

$('input[name="airport"]', '#details-form').select2('val', '2'); 

Я попытался установить исходное значение с помощью следующего кода:

$('input[name="airport"]', '#details-form').val('2'); 

Он работает, но где-то внутри метода валь ВЫБ.2 в ценностном .. пропадает

я использую версию 3.4.0 от Select2 с this update.

Спасибо

+0

ли эта помощь: https://github.com/ivaynberg/select2/issues/112 – mccannf

+0

@mccannf Нету, они говорят о данных массива, и я использую AJAX запрос – nKognito

ответ

7

Вот рабочий раствор:

$('input[name="airport"]', '#details-form').select2({ 
      minimumInputLength: 3, 
      multiple: true, 
      separator: ';', 
      width: 'off', 
      initSelection : function (element, callback) { 
       var data = []; 
       $(element.val().split(',')).each(function(i) { 
        var item = this.split(':'); 
        data.push({ 
         id: item[0], 
         label: item[1] 
        }); 
       }); 
       callback(data); 
      }, 
      ajax: { 
       url: History.getBasePageUrl() + 'get-airports-dictionary', 
       dataType: 'json', 
       data: function (term, page) { 
        return { 
         q: term 
        }; 
       }, 
       results: function (data, page) { 
        var code = parseInt(data[0]); 
        switch (code) { 
         case 0: 
          return {results: data[1]}; 
          break; 
         default: 
          window.Common.showError(data[1]); 
          break; 
        } 
       } 
      }, 
      formatResult: formatAirportResult, 
      formatSelection: formatAirportSelection 
     }); 
     function formatAirportResult(item) { 
      return item.label + ' <strong class="pull-right">' + item.code + '</strong>'; 
     } 
     function formatAirportSelection(item) { 
      return item.label; 
     } 

Я не знаю, почему, но значение аргумента не может быть строка - для того, чтобы заставить его работать он должен быть массив строк. В противном случае select2 устанавливает пустое значение в поле ввода.

$('input[name="airport"]', '#details-form').select2('val', ['2:Domodedovo', '3:Vnukovo']); 

Proof - http://jsfiddle.net/GZyeb/1/