【问题标题】:Is there a SelectedIndex for an HTML5 DataList?HTML5 DataList 是否有 SelectedIndex?
【发布时间】:2021-08-15 04:46:09
【问题描述】:

您可以选择任何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>

【问题讨论】:

    标签: javascript html html-datalist


    【解决方案1】:

    不,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);
    

    【讨论】:

    • 当心:当用户点击数据列表中的下拉项(鼠标点击)时,不会触发任何事件(chrome21)
    • 应该将事件监听器更改为input,因为这也可以解决 Dmitry 提出的问题。
    【解决方案2】:

    specs 判断,datalist 对象没有selectedIndex 属性。但是你可以找到它的默认选项,有selected。或者将输入的值与每个选项值进行比较,然后手动查找索引。

    【讨论】:

      【解决方案3】:
      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;}
      

      【讨论】:

        【解决方案4】:

        假设您在上面的示例中具有这样的数据属性,

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

        【讨论】:

          【解决方案5】:

          您可以只向输入元素添加一个值。这将作为“默认”值显示给用户。如果用户决定更改它,即从输入字段中删除此值,则 datalist 中的列表将显示:

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

          【讨论】:

            【解决方案6】:

            这是从DatalistSelectedIndex 获取索引的脚本。来自@pingle60的HTML

            let x = document.getElementById("browsers").options;
            let input = document.querySelector('input');
            input.onchange = getIndex;
            
            function getIndex(e) {
                for (var i=0;i<x.length;i++) {
                    if (x[i].value == e.target.value) {
                        return i;
                        // alert('The index of SellectedIndex is : ' + i + ' and the value is : '  +x[i].value);
                        break;
                    }
                }   
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-05-20
              • 2014-05-27
              • 2012-04-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-04-11
              相关资源
              最近更新 更多