如何检测从数据列表中选择时更改的输入字段
How do detect input field changed when selecting from a datalist?
我有一个带有附加数据列表的输入:
<input type="text" list="mylist">
<datalist id="mylist">
<option>1
<option>2
</datalist>
当我从列表中选择一个选项时,change
事件不会在输入元素上激发。那么,我如何检测输入的变化呢?
您可以捕获input
事件:
document.querySelector('input').addEventListener('input', function() {
alert('Changed!');
});
<input type="text" list="mylist">
<datalist id="mylist">
<option>1
<option>2
</datalist>
更新
一开始我没有注意到jQuery标记,@YanickRochon提出了一个很好的观点,即这也应该捕获更改事件。
新代码段
$('input').on('input change', function() {
alert('Changed!');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" list="mylist">
<datalist id="mylist">
<option>1
<option>2
</datalist>
$(document).ready(function(){
$('input').on('input', function () {
alert("changed");
})
});
Fiddle
您可以使用输入事件,比如这个
$('#input-list').on('input change', function () {
console.log($(this).val());
})
示例
所有其他答案都没有区分输入场景
问题是如何特别是知道datalist
何时更改了输入,而何时不被其他任何东西更改。这对于区分非常重要。
以下代码将完全区分通过键入、通过键盘或鼠标粘贴的用户输入和从<datalist>
实际选择选项
var noneDatalistInput;
$('input').on('keydown paste', onNoneDatalistInput)
.on('input', onInput);
// raise a flag
function onNoneDatalistInput(e){
if( e.key == "Enter" ) return;
if( noneDatalistInput ) clearTimeout(noneDatalistInput);
noneDatalistInput = setTimeout(function(){ noneDatalistInput = null }, 50);
}
function onInput(){
var isDatalistInput = !noneDatalistInput;
console.log('was a datalist option selected? ', isDatalistInput);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" list="mylist">
<datalist id="mylist">
<option>1</option>
<option>2</option>
</datalist>
你在听INPUT的变化吗?还是数据列表更改?
// wont work
$("#myList").on('change', function () {
alert("yay!");
});
// fires yay! when change value (after focus out)
$("#myText").on('change', function () {
alert("yay!");
});
看看这个小提琴
相关文章:
- 选择字段-更改popover颜色
- 构建HTML选择字段并使用JavaScript数组选择选项
- 无法使用 Javascript 禁用选择字段
- 在应用 jQuery.Selected 时,使用 jQuery.Validate 来验证选择字段时,暴露错误
- 取消选中特定复选框时,React切换不删除的选择字段
- 添加值以动态选择字段
- jquery自动更新两个选择字段
- 如何在Sencha Touch应用程序的选择字段内自定义列表
- 自动完成PHP表单选择字段中的用户姓氏
- 添加选项以使用 javascript 从 json 文件中选择字段
- Angular ng通过ng选项重复多个选择字段,而不显示已选择的数据
- 如何创建具有空白选项和未筛选状态的动态选择字段
- 选择字段无需按钮即可工作,但在选择字段中不会更改
- 合并到选择字段
- 动态选择字段,在另一个选择字段 - Laravel 5.2 和 JS 中更改后重新填充
- 检查 2 个输入字段和一个选择字段,以便在它们全部填写后进行更改
- ReactJS - 如何在单击按钮时添加更多文本、文本字段、选择字段
- 检查表行的所有输入/选择字段是否都有值
- 当从第一个选项中选择一个选项时,如何取消隐藏另一个选择字段
- 具有相同名称和不同 id 的选择字段数组