【发布时间】:2018-07-12 13:32:06
【问题描述】:
我需要截取和替换输入文本中的字符,因此输入文本的 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 事件永远不会被触发。
您了解发生了什么以及如何使其正常工作吗?
【问题讨论】:
-
你尝试使用
blur事件吗? developer.mozilla.org/en-US/docs/Web/Events/blur -
是否有任何其他事件同时触发?我曾经遇到过同样的问题,因为我使用的框架同时触发了其他地方的点击。
-
The change event is fired for <input>, <select>, and <textarea> elements when a change to the element's value is committed by the user. Unlike the input event, the change event is not necessarily fired for each change to an element's value.- 更改是非标准事件 - developer.mozilla.org/en-US/docs/Web/Events/change -
@ZakariaSahmane 我已经用 vanilla js 编写代码以获得更好的解释
-
@VivienPipo 它似乎来自
preventDefault,通过调用它,您会破坏输入的正常行为。尝试删除它!
标签: javascript