2015-09-20 4 views
3

У меня есть форма для редактирования существующих данных. Пользователь выбирает запись, а затем форма предварительно заполняется запросом базы данных. Некоторые из полей формы представлены как каталоги данных (позволяющие предварительно заполненные варианты, но пользователи могут вводить свои собственные).datalist: отображение совпадающего выбора из запроса во входном текстовом поле

То, что я хотел бы сделать это, чтобы эти datalist элементов появляются с текущим значением для этого ключа (из БД), показывающее в текстовом поле на вершине datalist - то есть, в той же манере, что <option> значения может быть соответствует параметрам в входе <select> и показывает эту опцию в поле <select> при его рендеринге.

Я добавил selected в список опций, как это:

<input type="search" 
    name="Status" 
    placeholder = "~ Status ~" 
    id="Status" 
    list="statuslist"> 

<datalist id="statuslist"> 
    <select> 
     <option value="launched">launched</option> 
     <option value="pre-launch" selected>pre-launch</option> 
     <option value="no company">no company</option> 
    </select> 
</datalist> 

... но это, кажется, не сделать трюк. В поле ввода datalist всегда отображается ~ Status ~ (заполнитель). Если я удалю заполнитель, это просто пусто.

datalist поддерживает этот вид функциональности? Как это сделать?

+0

Не могли бы вы показать нам ваш соответствующий код javascript/jquery? – turbopipp

+0

Я использую плагин datalist.js. Таким образом, единственный jquery должен загрузить datalist.js в , а затем объявить '$ ('input [list]'). Datalist();' в конце – globalSchmidt

+0

Редактировать nevermind мой комментарий к селектору, я увидел, что теперь таргетинг на список верен , – turbopipp

ответ

2

datalist.js не делает обновление с выбранным значением, вы должны добавить это после инициализации DataList

//traverse each list 
$('input[list]').each(function(){ 
    // variable for the jquery object of the selected option 
    var datalist = $('#' + $(this).attr('list') + ' option:selected'); 
    // check if value, but also check if option has the attribute "selected" 
    if(datalist.val() != 'undefined' && datalist.attr('selected')){ 
     // update selected to the pre-selected 
     $(this).attr('value',datalist.text()); 
    } 
}); 

updated jsfiddle

Edit: И добавлена ​​поддержка нескольких списков в соответствии с просьбой, и исправлена ​​ошибка с решение резервного копирования datalist.js, чтобы избежать перезаписи заполнителя, если ничего не выбрано.

+0

Это работает! Теперь просто нужно обобщить это так, чтобы это поведение по умолчанию для всех входных данных. Любые мысли по этому поводу? – globalSchmidt

+0

Yepp, '.each()' хорошо для этого, обновил мой ответ. (Edit: btw 'focus()' isnt required, datalist.js, кажется, повторно заполняет список размытием/фокусом, когда есть более одного списка) – turbopipp

+0

Brilliant. Только одна небольшая причуда ... когда конкретный datalist не имеет значения, возвращаемого из db, нет «выбранного» варианта, но теперь этот код отображает первый вариант в datalist вместо placeholder. – globalSchmidt

Смежные вопросы