jQuery select2 переформатирует ‹select›, но отправляет идентификатор параметра вместо значения

Я использую подключаемый модуль jquery select2 для переформатирования моих длинных параметров выбора. Все работает так, как ожидалось, за исключением случаев, когда я отправляю форму, значение id сохраняется как значение вместо значения (в данном случае lang). Я не могу понять, что я делаю неправильно.

Вот как выглядит скрипт:

var langs=[{id:0,lang:'English'},
    {id:1,lang:'Afrikaans'},
    {id:2,lang:'Albanian'},
    {id:3,lang:'Zulu'}];

function format(item) { return item.lang; };

$("#field_4").select2({
                  placeholder: "Select your language",
                  data:{ results: langs, text: 'lang' },
                  formatSelection: format,
                  formatResult: format
                  });

Вот разметка:

<input id="field_4" name="field_4" type="text" class="regular-text " value="3" />

Когда я регистрирую возвращаемое значение в консоли, я вижу это:

{Object}
    O: Object
        id: "1"
        text: "Afrikaans"

ОБНОВЛЕНИЕ: я немного продвинулся в этом вопросе. Если я добавлю следующее в объект конструктора (для select2), я смогу сохранить правильные значения (вместо id). Однако это не работает, когда я добавляю к <select>s, которые используют AJAX для получения параметров.

id : function(object) {
return object.lang;
}

person emersonthis    schedule 12.02.2013    source источник
comment
Разве не предполагается сохранить идентификатор? Это является значением; lang - это текст, а не значение.   -  person Dave Newton    schedule 12.02.2013
comment
Я хочу, чтобы форма сохраняла фактическое название языка. Не тот идентификатор. Это возможно?   -  person emersonthis    schedule 12.02.2013
comment
Тогда зачем вообще идентификаторы? Или я должен сказать, иметь только идентификаторы (но сделать их именами языков) и установить текстовое значение «id» вместо «текст».   -  person John S    schedule 12.02.2013
comment
@JohnS Ваш хак, вероятно, сработает, но свойство ID ожидается, когда список параметров передается через AJAX, что я и делаю в другом месте формы. Я исключил AJAX из этого вопроса, потому что у меня одна и та же проблема со всеми входными данными, поэтому проблема не в AJAX. Но мне все еще нужно выяснить, как правильно присвоить правильное значение.   -  person emersonthis    schedule 12.02.2013
comment
@JohnS Оказывается, select2 всегда хочет включить свойство ID. Я протестировал его только с text:, и это делает параметры недоступными для выбора.   -  person emersonthis    schedule 12.02.2013


Ответы (1)


Я понял это с помощью разработчика: https://github.com/ivaynberg/select2/issues/852#issuecomment-13478644

Короче говоря, есть функция обратного вызова id:, которая обрабатывает сопоставление возвращаемого идентификатора с желаемым входным значением.

person emersonthis    schedule 13.02.2013
comment
Спасибо за 'вкратце', т.к. ссылка больше не существует - person OverMars; 17.07.2021