javascript - JavaScript - 在 DATE 输入上重新调度 keyup 事件
问题描述
我正在寻找一种方法来实时keyup
将来自一个本地日期输入元素的 KeyboardEvent重新调度到另一个(类似于同时写入两个日期输入)。
我用文本输入尝试了下面的代码,效果很好。
但是对日期输入使用相同的逻辑并不能完成这项工作:尽管接收到已调度的事件,但在第二个日期输入上没有写入任何内容。
这是我的代码: index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="main.js" defer></script>
</head>
<body>
<input id="startDate" type="date" />
<input id="endDate" type="date" />
<input id="text1" type="text" />
<input id="text2" type="text" />
</body>
</html>
main.js
let startDate = document.getElementById('startDate'),
endDate = document.getElementById('endDate'),
text1 = document.getElementById('text1'),
text2 = document.getElementById('text2')
;
let endDateBinded = this.dispatchElementEvnt.bind(null,[endDate]),
text2Binded = this.dispatchElementEvnt.bind(null,[text2]);
startDate.addEventListener('keyup', endDateBinded);
endDate.addEventListener('keyup',selfUpdate);
text1.addEventListener('keyup', text2Binded);
text2.addEventListener('keyup',selfUpdate);
function dispatchElementEvnt(secondElement,e){
let event = new KeyboardEvent(e.type,e);
secondElement[0].dispatchEvent(event);
}
function selfUpdate(e) {
this.value += e.key;
}
解决方案
The issue is that the startDate is invalid (i.e. dd/mm/2021) until it is changed to a valid date (i.e. 12/8/2021) so unfortunately both dates won't change in real time, however both can be changed after startDate has a valid date.
credit: Changing two input type dates at the same time
The code below changes the endDate after the StartDate is set:
let startDate = document.getElementById('startDate'),
endDate = document.getElementById('endDate'),
text1 = document.getElementById('text1'),
text2 = document.getElementById('text2')
;
let endDateBinded = this.dispatchElementEvnt2.bind(null,[endDate]),
text2Binded = this.dispatchElementEvnt.bind(null,[text2]);
startDate.addEventListener('change', endDateBinded);
endDate.addEventListener('keyup',selfUpdate2);
text1.addEventListener('keyup', text2Binded);
text2.addEventListener('keyup',selfUpdate);
function dispatchElementEvnt(secondElement,e){
let event = new KeyboardEvent(e.type,e);
secondElement[0].dispatchEvent(event);
}
function selfUpdate(e) {
this.value += e.key;
}
function dispatchElementEvnt2(secondElement,e){
let event = new KeyboardEvent(e.type,e);
secondElement[0].dispatchEvent(event);
endDate.value= startDate.value;
}
function selfUpdate2(e) {
this.value += e.key;
}
推荐阅读
- java - 如何使用 Spring @ControllerAdvice 和 question-spring-web 处理休眠异常
- python - 如何编写与以下 R 代码等效的 Python/Pandas?
- javascript - 在 JavaScript for 循环中重新分配/声明一个 const 变量并使用不同的值多次保存它?
- sql - 通过“+”和“||”将两列中的项目连接起来有什么区别 对于 SQL
- laravel - 如何在测试中获取使用 Laravel Livewire 上传的文件的哈希名称
- javascript - 类实例化过程
- javascript - 数组需要根据键值对删除重复对象并返回 sum [fiddle]
- google-chrome - Chrome.identity 无需提供凭据即可完美运行
- javascript -
- python - Splitting string by more empty lines