-
Notifications
You must be signed in to change notification settings - Fork 6
Open
Description
在 第 51 期(W3C 标准-JavaScript-事件):复合事件 中我们了解了复合事件,并利用复合事件解决了在文本框中输入中文时的提前上屏问题。本期要介绍的是 input 事件里的 inputType 属性,利用它也可以解决上面那个问题。
写过表单相关代码的同学应该对 input 事件不陌生,我们可以在 input 事件的回调函数里对输入内容进行即时处理,它的 event 参数有个 inputType 属性,会返回当前输入的类型:
insertText键盘直接输入的insertFromPaste通过粘贴进来的insertCompositionText通过 IME 输入的insertFromDrop通过拖放进来的deleteContentBackward回退删除(按 backspace 键)deleteContentForward前向删除(按 delete 键)deleteByCut剪切删除(选中文本按 ctrl + X)
有了输入类型我们就可以准确判断输入来源并做相应的处理了。下面我们利用这个特性来解决上面那个中文输入时提前上屏的问题:
<input type="text" id="input">
<p id="result"></p>var input = document.getElementById('input');
var result = document.getElementById('result');
input.addEventListener('input', function(e) {
const inputType = e.inputType;
if (inputType !== 'insertCompositionText') {
output(this.value);
}
});
input.addEventListener('compositionend', function() {
output(this.value);
});
function output(value) {
result.innerHTML = value;
}Metadata
Metadata
Assignees
Labels
No labels