代码之家  ›  专栏  ›  技术社区  ›  Korty

使用数据值获取datalist对象的选定选项的id

  •  0
  • Korty  · 技术社区  · 7 年前

    我想获取datalist对象上Selected选项的ID(数据值)。

    我尝试使用Javascript函数获取ID,并使用 this.dataset.value 未定义

    function getIdOfDatalist(divid){
        console.log(document.getElementById(divid).dataset.value);
    }
    <datalist id="options">
        <option value="myoption one" data-value="1">
        <option value="myoption two" data-value="2">
        <option value="myoption three" data-value="3">
    </datalist>
        
    <input list="options" id="myoptions">
    <button onclick="getIdOfDatalist('myoptions');">check</button>

    我犯了什么错?(代码简化,JS在头部) <script>

    3 回复  |  直到 5 年前
        1
  •  2
  •   xXx    5 年前

    如果您稍微更改HTML,您可以使用一种方法来避免自己循环项目。例如:

    function getIdOfDatalist(listid){
      var listObj = document.getElementById(listid);
      var datalist = document.getElementById(listObj.getAttribute("list"));
      console.log(datalist.options.namedItem(listObj.value));
    }
    <datalist id="options">
      <option value="myoption one" name="myoption one" data-value="1">
      <option value="myoption two" name="myoption two" data-value="2">
      <option value="myoption three" name="myoption three" data-value="3">
    </datalist>
    
    <input list="options" id="myoptions">
    <button onclick="getIdOfDatalist('myoptions');">check</button>

        2
  •  1
  •   Michael Rdz Mtz    6 年前

    使用querySelector和输入值,输入具有一个list属性,您可以直接访问datalist元素

    function getIdOfDatalist(divid){
      let value = divid.list.querySelector(`[value="${divid.value}"`).dataset.value;
    }
    
        3
  •  1
  •   xXx    5 年前

    下面是一个使用JQuery的简单解决方案。

    因为JQuery有一个名为 data() ,很容易得到 data-value. 在javascript中,您可以使用 dataset.value getAttribute() .

    $(document).ready(function() {
     $('button').click(function() {
        var value = $('input').val();
        alert($('#options [value="' + value + '"]').data('value'));
        });  
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <datalist id="options">
      <option value="myoption one" data-value="1">
      <option value="myoption two"  data-value="2">
      <option value="myoption three"  data-value="3">
    </datalist>
    
    <input list="options" id="myoptions">
    <button>check</button>

    希望这有帮助。

        4
  •  0
  •   Korty    7 年前

    也许我只有一个解决方案:使用for循环检查输入和数据列表:

    function getIdOfDatalist(datalist_id,input_id){
    
        var datalist = document.getElementById(datalist_id);
        var input    = document.getElementById(input_id);
    
        for (var i=0;i<datalist.options.length;i++) {
            if (datalist.options[i].value == input.value) {
                // obtains the data-company attribute
                console.log(datalist.options[i].getAttribute("data-value"));
                break;
            }
        }
    }
    

    但在我看来,这不是最好的解决办法,是吗?

        5
  •  0
  •   xXx    5 年前

    试试这个:

    function getIdOfDatalist()
    {
        var element_input = document.getElementById('myoptions');
        var element_datalist = document.getElementById('dl_options');
        var opSelected = element_datalist.querySelector(`[value="${element_input.value}"]`);
        var id = opSelected.getAttribute('data-value');
        //id hold the selected datalist id
    }
    <datalist id="dl_options">
      <option value="myoption one" data-value="1">
      <option value="myoption two" data-value="2">
      <option value="myoption three" data-value="3">
    </datalist>
    
    <input list="dl_options" id="myoptions">
    <button onclick="getIdOfDatalist();">check</button>