在 HTML 中的 Datalist 中查找所选项目

IT技术 javascript jquery html html-datalist
2021-03-13 13:38:30

我有一个像这样的数据列表

<input list="browsers">

<datalist id="browsers">
  <option id="op1" value="Internet Explorer">
  <option id="op2" value="Firefox">
  <option id="op3" value="Chrome">
  <option id="op4" value="Opera">
  <option id="op5" value="Safari">
</datalist>

我正在使用 jquery 向数据列表添加“选项”。现在的问题是如何找到用户在数据列表中选择/单击的选项。我想在用户选择/单击选项后立即获取选项的 id?

4个回答

您可以向输入字段添加 ID - 并侦听输入事件。然后您必须获取要在选择器中使用的输入值才能获取所选选项

$(function() {
  $('#browserinput').on('input',function() {
    var opt = $('option[value="'+$(this).val()+'"]');
    alert(opt.length ? opt.attr('id') : 'NO OPTION');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id='browserinput' list="browsers">

<datalist id="browsers">
  <option id="op1" value="Internet Explorer" />
  <option id="op2" value="Firefox" />
  <option id="op3" value="Chrome" />
  <option id="op4" value="Opera" />
  <option id="op5" value="Safari" />
</datalist>

@SidM 那么您可能应该使用选择下拉列表而不是数据列表,因为数据列表用作输入的自动完成
2021-05-02 13:38:30
是的,我需要带有下拉菜单的自动完成功能,因此我使用的是数据列表
2021-05-13 13:38:30
如果我对任何 2 个选项都有相同的值怎么办..那么我总是会得到第一个选项..
2021-05-14 13:38:30
但是在使用数据列表时无法区分何时有 2 个相同的值
2021-05-17 13:38:30

试试这个方法

<input list="browsers" id="input">

<datalist id="browsers">
  <option id="op1" value="Internet Explorer">
  <option id="op2" value="Firefox">
  <option id="op3" value="Chrome">
  <option id="op4" value="Opera">
  <option id="op5" value="Safari">
</datalist>

$(function(){
    $('#input').change(function(){
        console.log($("#browsers option[value='" + $('#input').val() + "']").attr('id'));
    });
});

http://jsfiddle.net/smap06ro/45/

你能创造一个相同的小提琴吗?
2021-05-20 13:38:30

试试这个,我得到了 'data-id' 值。

<input list="browsers" id="input">
<datalist id="browsers">
 <option data-id="op1" value="Internet Explorer">
 <option data-id="op2" value="Firefox">
 <option data-id="op3" value="Chrome">
 <option data-id="op4" value="Opera">
 <option data-id="op5" value="Safari">
</datalist>

<script type="text/javascript">
$(function(){
    $('#input').change(function(){
        var abc = $("#browsers option[value='" + $('#input').val() + "']").attr('data-id');
        alert(abc);
    });
});
</script>

//if you click/choose 'Firefox' then 'op2' will show

您可以使用 is(':selected') 检查

$('#browsers option').each(function() {
    if($(this).is(':selected')){
     // Your code here with the selected value
   }
});

或获取选定的选项值

 $('#browsers').val();
如果用户插入了不在列表中的内容怎么办?
2021-04-24 13:38:30
在这里你是jsfiddle.net/hLzbLhb4/1选择点击任意位置后查看警报,所以它会像 focusout
2021-04-28 13:38:30
你能创造一个相同的小提琴吗?
2021-05-04 13:38:30
基本上你需要检查输入字段的值,所以如果输入字段有值显示它等。
2021-05-05 13:38:30
这个答案是不正确的。datalist不支持的:selected伪类,因为DataList控件可以为多个输入提供建议,每个人都可以包含从列表中选择不同的选择。评论中的小提琴做了完全不同的事情。
2021-05-16 13:38:30