可过滤的下拉列表获取ID

时间:2019-03-17 15:01:23

标签: javascript jquery filter dropdown

我必须获取所选选项的ID。

这种方式总是返回第一个id,它返回“ 1”:

function myFunction() {
  var skills = document.getElementById('toto');
  var skillId = skills.getAttribute('data-id');
  console.log(skillId);
}
<label>
    Skills :
    <input id="inputTest" name='skill' list='skills'>
        <datalist id='skills'>
            <select> 
                 <option id="toto" data-id="1">HTML</option>
                 <option id="toto" data-id="2">Jquery</option>
                 <option id="toto" data-id="3">CSS</option>
            </select>
        </datalist>
    </label>

<button type="button" id="button1" onclick="myFunction()"> Clickhere </button>

这种方法不起作用,它返回“ null”:

<label>
Skills :
<input id="inputTest" name='skill' list='skills'>
    <datalist id='skills'>
        <select>
         <div id="toto">
            <option data-id="1">HTML</option>
            <option data-id="2">Jquery</option>
            <option data-id="3">CSS</option>
         </div>
        </select>
    </datalist>
</label>

<button type="button" id="button1" onclick="myFunction()"> Clickhere </button>

<script>
    function myFunction(){
    var skills = document.getElementById('toto');
    var skillId = skills.getAttribute('data-id');
    console.log(skillId); 
    }
</script>

以下方法也不起作用:

...
<datalist id='skills'>
...
    <script>
        function myFunction(){
        var skills = document.getElementById('skills');
        var skillId = skills.getAttribute('data-id');
        console.log(skillId); 
        }
    </script>

如果我将ID放在上,它也不会起作用。

getAttribute()方法不可避免地与<div></div>方法相同getElementById()

我只想了解正确的功能。

还有另一种没有数据列表的方法吗?因为“ Internet Explorer 9和更早版本或Safari不支持datalist标记。”

非常感谢:)

2 个答案:

答案 0 :(得分:3)

您可以使用filter()map()通过匹配文本来获得选项:

function myFunction(){
  var skills = document.getElementById('inputTest');
  var allOption = [].slice.call(document.querySelectorAll('#skills option'));
  var selected = allOption.filter(o => o.textContent == skills.value).map(el => el.getAttribute('data-id'))[0];
  console.log(selected); 
}
<label>
Skills :
<input id="inputTest" name='skill' list='skills'>
    <datalist id='skills'>
        <option data-id="1">HTML</option>
        <option data-id="2">Jquery</option>
        <option data-id="3">CSS</option>
    </datalist>
</label>

<button type="button" id="button1" onclick="myFunction()"> Clickhere </button>

答案 1 :(得分:1)

@Mamun,它就像一种魅力一样,顺便说一句,我找到了另一种使用Jquery做到这一点的方法:

$(document).ready(function() {
    $('#button1').click(function()
    {
        var value = $('#inputTest').val();
        console.log(($('#skills [value="' + value + '"]').data('value')));
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label>
Skills :
<input id="inputTest" name='skill' list='skills'>
    <datalist id='skills'>
        <option value="HTML" data-value="1"></option>
        <option value="CSS" data-value="2"></option>
        <option value="Jquery" data-value="3"></option>
        <option value="Java" data-value="4"></option>
    </datalist>
</label>

<button type="button" id="button1"> Clickhere </button>

我希望它也会对您有所帮助。