簡體   English   中英

是否有HTML5 DataList的SelectedIndex?

[英]Is there a SelectedIndex for an HTML5 DataList?

您可以選擇任何select元素的當前option

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>

不,datalist元素用於為輸入提供自動完成功能。 它是數據源,對用戶隱藏,多個輸入可以鏈接到它。 因此,擁有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);

根據規格判斷, datalist對象沒有selectedIndex屬性。 但是你可以找到它的默認選項,它已經selected 或者將輸入值與每個選項值進行比較並手動查找索引。

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;}

您只需向input元素添加一個值即可。 這將作為“默認”值顯示給用戶。 如果用戶決定更改它,即從輸入字段中刪除該值,則數據列表中的列表將顯示:

<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>

假設您在上面的示例中有這樣的數據屬性,

<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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM