[英]Why 'keydown' detect when I chose select in 'datalist' element (select items from jQuery get)
I type in the input. 我输入输入。 After each character entered the key down event is detected.
输入每个字符后,将检测到按键事件。 I get the elements using ajax GET from .json file and save it to datalist as an option.
我从.json文件中使用Ajax GET获取元素,并将其保存为数据列表作为选项。 I want keydown only to fire when typing.
我只想在键入时触发keydown。 Why, when I take one option from datalist 'keydown' is also detect?
为什么当我从数据列表“ keydown”中选择一个选项时也会检测到?
Link to code example: https://playcode.io/453516?tabs=script.js,preview,console 链接到代码示例: https : //playcode.io/453516?tabs=script.js,预览,控制台
For example: 例如:
My code is here: 我的代码在这里:
function debounce(func, wait, immediate) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; } const inputCompany = $('#company'); inputCompany.keydown('input', debounce(function() { //cleaning datalist let datalist = document.getElementById('listOfNames'); while (datalist.lastChild) { datalist.removeChild(datalist.lastChild); } $.ajax({ type: "GET", url: 'https://api.myjson.com/bins/1co0nd', data: "value=" + $(this).val().valueOf(), success: function(data) { console.log('success'); console.log(data); // add elements to datalist data.companies.forEach(item => { let options = document.createElement('option'); options.value = item; datalist.appendChild(options); }); }, error: function() { alert('error'); } }) }, 250));
I expect not to detect 'keydown' when I click on datalist option. 我希望在单击数据列表选项时不会检测到“ keydown”。
In that case I should use .keypress, because .keypress fires when an actual character is being inserted in, not keyboard key. 在那种情况下,我应该使用.keypress,因为.keypress是在插入实际字符而不是键盘键时触发的。
Correct code: 正确的代码:
const inputCompany = $('#company');
inputCompany.keypress('input',
debounce(function () {
//cleaning datalist
let datalist = document.getElementById('listOfNames');
while (datalist.lastChild) {
datalist.removeChild(datalist.lastChild);
}
$.ajax({
type: "GET",
url: 'https://api.myjson.com/bins/1co0nd',
data: "value=" + $(this).val().valueOf(),
success: function (data) {
console.log('success');
console.log(data);
// add elements to datalist
data.companies.forEach(item => {
let options = document.createElement('option');
options.value = item;
datalist.appendChild(options);
});
},
error: function () {
alert('error');
}
})
}, 250));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.