我有一个看起来像这样的数据列表:
<datalist id="foodlist">
<option value="one" ></option
<option value="two" ></option>
<option value="three" ></option>
</datalist>
<input type="text" list="foodlist" autocomplete=true id="inputItem"/>
当用户使用JavaScript选择列表中的选项时,我希望触发一个事件。
如何实现它?
onClick,onChange似乎不起作用。
答案 0 :(得分:5)
我知道这有点旧,但我想我应该把它记录在某个地方。如果您尝试从下拉选择中检测输入而不是单击本身,则可以使用“输入”事件并检查传递的事件对象的类型 - 剪切/粘贴/按键输入将传递“InputEvent”对象,而数据列表选择将传递通用的“事件”对象。
var textbox = document.getElementById("inputItem");
textbox.addEventListener("input", function(e){
var isInputEvent = (Object.prototype.toString.call(e).indexOf("InputEvent") > -1);
if(!isInputEvent)
alert("Selected: " + e.target.value);
}, false);
<datalist id="foodlist">
<option value="one" ></option>
<option value="two" ></option>
<option value="three" ></option>
</datalist>
<input type="text" list="foodlist" autocomplete=true id="inputItem"/>
答案 1 :(得分:0)
<datalist id="foodlist">
<option value="one" ></option>
<option value="two" ></option>
<option value="three"></option>
</datalist>
<input id="txt" type="text" list="foodlist" autocomplete=true id="inputItem"/>
document.getElementById('txt').addEventListener('input', function () {
console.log('changed');
var val = document.getElementById("txt").value;
alert(val);
});
仅在某些浏览器中支持datalist标记。这是获取选定值的简单技巧。
答案 2 :(得分:0)
虽然已经4岁了,但今天我偶然发现了它,并遇到了其他人报告的跨浏览器问题。通过侦听输入字段上的keyup事件,然后检查事件类型,可以解决此问题。
<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>
实际击键将为KeyboardEvent
,而数据列表选项单击将仅为Event
。
确认可以在Chrome,Firefox和Edge中使用。