【问题标题】:Is it possible to trigger input/change event when something is changed in input type="date"?当输入类型=“日期”中的某些内容发生更改时,是否可以触发输入/更改事件?
【发布时间】:2020-04-21 14:11:22
【问题描述】:
let date = document.getElementsByTagName('input')[0];
date.addEventListener('input',function(){
console.log('input');
});
<input type="date">
let date = document.getElementsByTagName('input')[0];
date.addEventListener('change',function(){
console.log('change');
});
<input type="date">
它们是相同的代码,我只是使用了两种不同的事件类型。
问题是,当日期的所有三个部分都更改时,事件就会触发。例如,如果我有 yyyy-mm-21 或 2020-04-dd 事件不会触发。
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date
这里说只有这两个事件输入 type="date" 可以理解。如果我想在每次更改日期时都触发事件,我该怎么办?
请
没有 JQUERY
【问题讨论】:
标签:
javascript
events
input
【解决方案1】:
您可以对所有存在的“更改”事件进行一些创意。取决于你想在每个事件上做什么。这只是为了显示一些选项,显然您可以为每个事件分配所需的任何功能。
let date = document.querySelector('input[type="date"]');
let myAwesomeFunction = function(event){
console.log('event.type: ', event.type, ' value: ', event.target.value );
};
date.addEventListener('change', myAwesomeFunction);
date.addEventListener('click', myAwesomeFunction);
date.addEventListener('keyup', myAwesomeFunction);
date.addEventListener('keydown', myAwesomeFunction);
date.addEventListener('blur', myAwesomeFunction);
date.addEventListener('focus', myAwesomeFunction);
date.addEventListener('focusout', myAwesomeFunction);
<input type="date">
不幸的是,在设置所有字段(日、月、年)之前,您不会获得值。 (如果有人对此有解决方案,请发表评论)
【解决方案2】:
使用onkeyup 在每个键上触发,onchange 在用户从选择器中选择日期时触发。
let date = document.getElementsByTagName('input')[0];
date.addEventListener('keyup',function(){
console.log('keyup');
});
date.addEventListener('change',function(){
console.log('change');
});
<input type="date">