javascript - keydown 事件:如何使用 preventdefault 而不触发更改事件
问题描述
我需要拦截和替换输入文本中的字符,因此输入文本的 keydown 事件处理程序具有以下代码:
let my_input = document.querySelector("#my_input");
my_input.addEventListener('keydown', (e) => {
e.target.value = 'toto';
e.preventDefault();
var event = new Event('input', { 'bubbles': true, 'cancelable': true });
e.target.dispatchEvent(event);
});
my_input.addEventListener('change', (e) => {
//never fired even you focus out the input text
console.log("changes are coming");
});
<input type="text" id="my_input" pattern="^\d+((\.|\,)(\d{1,2})?)?" />
对我来说奇怪的是,当 focusout 事件被触发时,change 事件永远不会被触发。
您了解发生了什么以及如何使其正常工作吗?
解决方案
使用onblur
事件。e.preventDefault()
通过更改input
.
<input type="text" id="my_input" onblur="myFunction()"/>
<script>
let my_input = document.querySelector("#my_input");
var changed = false;
my_input.addEventListener('keydown', (e) => {
e.target.value = 'toto';
e.preventDefault();
changed = true;
var event = new Event('input', { 'bubbles': true, 'cancelable': true });
e.target.dispatchEvent(event);
});
function myFunction(){
if(changed){
console.log("changes are coming");
changed = false;
}
}
</script>
推荐阅读
- python - py转exe后运行口罩检测项目报错
- angular - 我无法使用 ionic 5 中的文件传输从 url 下载 pdf 文件
- react-native - 禁用 React Native 文本输入,但仍然可以按回车键/退格键
- reactjs - 如何在顺风中向图像添加剪辑路径
- c# - 找不到类型或命名空间名称“player”。(您是否缺少指令或程序集参考)
- workflow - AEM Workflow 6.5.7:AEM Workflow 可以处理数组吗?
- r - 如何在 r 中的 plotly 图表中修复辅助 y 轴的标题和值的位置?
- mysql - Heroku INSERT 命令拒绝用户
- powershell - 如何将文件复制到 Powershell 中的 NTFS 备用数据流中?
- python - 当两个字段中的任何一个不唯一时不要保存(更新的问题)