2013-07-24 2 views
6

Следующая функция получает json-данные из URL-адреса и заполняет элемент select с помощью jQuery. Я использую Select2, чтобы преобразовать это падение в поле с функцией автозаполнения.Select2 undefined issue

Все работает отлично, отличное от записи «undefined», которую я получаю, как только элементы выбора отображаются. Автозаполнение и падение работают отлично. Я попытался использовать заполнитель данных, даже добавив пустой элемент «option», но не добился успеха.

function CitiesList(callback){ 
$.getJSON(document.URL+'getCities/sdfsfs', function(data){ 
    var html = ''; 
    var len = data.length; 
    var option = '<option></option>'; 
    for (var i = 0; i< len; i++) { 
     html += '<option value="' + data[i] + '">' + data[i] + '</option>'; 
    } 
    $('.select_cities select').append(option); 
    $('.select_cities select').append(html); 
    if(callback && typeof callback == 'function'){ 
     callback.call(null); 
    } 

}); 
} 

      <select data-placeholder="Select a city" name="cities" id="cities"> 
      </select> 

'select_cities' - это обертка div вокруг элемента select.

ответ

-1

Добавьте следующую строку в свой скрипт, это должно быть работой.

<script> 
    $(document).ready(function() { $("select").select2(); }); 
</script> 
+0

CitiesList() уже вызывается внутри $ (document) .ready (function() {}), я дам ему go .. – Alex

+0

поэтому добавьте только $ ("select"). Select2(); внутри. –

+0

он все еще не работает ... он возвращает неопределенный внутри элемента select. – Alex

10

Я столкнулся с этим недавно. Похоже, что новые версии выбор2 имеют проблемы при включенной опции по умолчанию устанавливается без соответствующего value или когда value пустая строка, например:

<option value="" selected="selected">Select something</option> 

Либо явно определить непустое значение, например value="0" или установить placeholderOption: 'first' чтобы заставить ВЫБ.2 использовать первый вариант по умолчанию:

$('#select2-field').select2({ 
    placeholderOption: 'first' 
}); 
+0

Отличный ответ! Приходите к нему после почти 1 часа поиска! –

2

Эта проблема была решена в последней (3.4.2) версии выбор2. Обновите, и вам должно быть хорошо!

+1

Подтверждаю - 3.4.1 имеет эту проблему, но в 3.4.2 исправлено – olimortimer

+1

, опять же эта проблема в 3.4.5 –

+0

эта проблема существует в 4.0.2-rc.1 – shorif2000

0

Я исследовал эту ошибку и обнаружил, что вызов formatSelection может иметь свой параметр данных как массив или объект данных.

Чтобы исправить этот вопрос редактировать formatSelection функцию в select2.js файле следующим образом:

formatSelection: function (data, container, escapeMarkup) { 
     var dataElement = data ? (data[0] || data) : null; 
     return dataElement ? escapeMarkup(dataElement.text) : undefined;    
} 

Это должно исправить эту неприятную ошибку, и вы получите обратно на правильном пути

+0

не работает на 4.0.2-rc.1 – shorif2000

12

Теперь это работает в 4.0. Сообщение, отправленное в форматтера результатов, может быть сконфигурировано либо в объекте (см. their GitHub example repo.text), либо жестко закодировано в функции, вызываемой из свойства templateResult. например .:

templateResult: formatResult, 

// ...

function formatResult (result) { 

if (result.loading) return "Searching..."; 

конфигурации не было проще всего найти, поскольку ищет строку "Searching..." в их their GitHub example имели нулевые хиты, но в ретроспективе вполне интуитивно.

+0

Я думаю, что select2 должен получить более четкие документы, поскольку он уже настолько популярен. Это именно то, с чем я столкнулся несколько дней назад. – ClearBoth