Javascript 如何在单击数据列表选项列表时触发事件?

Javascript 如何在单击数据列表选项列表时触发事件?,javascript,html,Javascript,Html,我有一个数据列表,看起来像: document.getElementById('txt').addEventListener('input',function(){ console.log('changed'); var val=document.getElementById(“txt”).value; 警报(val); }); datalist标记仅在某些浏览器中受支持。下面是获取选定值的简单技巧。我知道这有点旧,但我想我应该在某个地方记录它。如果您试图从下拉选择而不是单击本身检测输入

我有一个数据列表,看起来像:



document.getElementById('txt').addEventListener('input',function(){
console.log('changed');
var val=document.getElementById(“txt”).value;
警报(val);
});

datalist标记仅在某些浏览器中受支持。下面是获取选定值的简单技巧。

我知道这有点旧,但我想我应该在某个地方记录它。如果您试图从下拉选择而不是单击本身检测输入,则可以使用“输入”事件并检查传递的事件对象的类型-剪切/粘贴/按键输入将传递“InputEvent”对象,而数据列表选择将传递一般的“event”对象

var textbox=document.getElementById(“inputItem”);
textbox.addEventListener(“输入”,函数(e){
var isInputEvent=(Object.prototype.toString.call(e.indexOf(“InputEvent”)>-1);
如果(!isInputEvent)
警报(“所选:+e.target.value”);
},假)

虽然这已经4岁了,但我今天偶然发现了它,并遇到了其他人报告的跨浏览器问题。我可以通过监听输入字段上的keyup事件,然后检查事件类型来解决这个问题

<input type="text" name="field_name" id="field_id" list="fields_list">
<datalist id="fields_list"></datalist>


var fieldInput=document.getElementById(“字段id”);
addEventListener('keyup',函数(e){if(isKeyboardEvent(e)){myFunction();}});
函数isKeyboardEvent(e){
返回(键盘事件的e实例);
}
函数myFunction(){
/*仅对键盘输入执行某些操作的函数*/
}
实际的按键笔划将是
KeyboardEvent
,而数据列表选项单击将只是
事件


已确认在Chrome、Firefox和Edge中工作。

可能与What's datalist重复?你的意思是aspnet datalist吗?select和datalist是两个不同的标记,它为我在输入框上单击的每个字母生成事件。我的期望是只在我点击建议列表时生成事件它帮助我在IE jusr上点击datalistseconding@Sudhakar时检测到输入事件获取“inputEvent”这在Firefox 75.0中不起作用。我发现捕获datalist选项选择/单击的唯一方法是根据选项列表测试值。
<input type="text" name="field_name" id="field_id" list="fields_list">
<datalist id="fields_list"></datalist>
<script>
var fieldInput = document.getElementById("field_id");

fieldInput.addEventListener('keyup', function(e) { if (isKeyboardEvent(e)) { myFunction(); } });

function isKeyboardEvent(e) {
    return (e instanceof KeyboardEvent);
}

function myFunction() {
   /* function that does something only on keyboard input */
}
</script>