Существует ли SelectedIndex для HTML5 DataList? - PullRequest
10 голосов
/ 18 января 2011

Вы можете выбрать текущий option любого select элемента:

mySelect.options[mySelect.selectedIndex]

Могу ли я сделать то же самое с DataList?Как то так:

<input id = "input" list = "datalist" type = "text" />

<datalist id = "datalist">
    <option value = "No. 1"></option>
    <option value = "No. 2"></option>
    <option value = "No. 3"></option>
</datalist>

<script>
    var datalist = document.getElementById ("datalist");
    var input = document.getElementById ("input");

    input.addEventListener ("keyup", function (event) {
        if (event.which === 13) {
            alert (datalist.options[datalist.selectedIndex]); // Example
        }
    }, false);
</script>

Ответы [ 5 ]

9 голосов
/ 18 января 2011

Нет, элемент списка данных предназначен для автозаполнения входов. Это источник данных, скрытый от пользователя, и несколько входов могут ссылаться на него. Поэтому не имеет смысла иметь selectedIndex.

Вместо этого вы должны просто проверить .value ввода:

var datalist = document.getElementById ("datalist");
var input = document.getElementById ("input");

input.addEventListener ("keyup", function (event) {
    if (event.which === 13) {
        alert(input.value);
    }
}, false);
2 голосов
/ 18 января 2011

Судя по спецификациям , datalist объект не имеет свойства selectedIndex. Но вы можете найти его по умолчанию, который имеет selected. Или сравните значение ввода с каждым значением параметра и вручную найдите индекс.

1 голос
/ 07 мая 2013
for (var i=0;i<datalist_id.options.length;i++)
    if (datalist_id.options[i].value == input_id.value) 
        {alert(datalist_id.options[i].innerText);break;}
0 голосов
/ 23 июня 2018

Допустим, у вас есть атрибуты данных в приведенном выше примере, как это,

<input list="browsers" name="browser" value="Internet Explorer">
<datalist id="browsers">
    <option value="Internet Explorer" data-company="Microsoft">
    <option value="Firefox" data-company="Mozilla">
    <option value="Chrome" data-company="Google/Alphabet">
    <option value="Opera" data-company="Opera">
    <option value="Safari" data-company="Apple">
</datalist>

и вы хотите получить атрибут data-company выбранного элемента,

используя цикл выше

for (var i=0;i<datalist_id.options.length;i++) {
    if (datalist_id.options[i].value == input_id.value) {
        // obtains the data-company attrbute
        console.log(datalist_id.options[i].getAttribute("data-company");
        alert(datalist_id.options[i].innerText);
        break;
    }
}
0 голосов
/ 24 мая 2015

Вы можете просто добавить значение к элементу ввода. Это будет показано пользователю как значение по умолчанию. Если пользователь решит изменить его, то есть удалить это значение из поля ввода, то появится список в списке данных:

<input list="browsers" name="browser" value="Internet Explorer">
<datalist id="browsers">
  <option value="Internet Explorer">
  <option value="Firefox">
  <option value="Chrome">
  <option value="Opera">
  <option value="Safari">
</datalist>
...