Open wingmeng opened 5 years ago
在 第 51 期(W3C 标准-JavaScript-事件):复合事件 中我们了解了复合事件,并利用复合事件解决了在文本框中输入中文时的提前上屏问题。本期要介绍的是 input 事件里的 inputType 属性,利用它也可以解决上面那个问题。
input
inputType
写过表单相关代码的同学应该对 input 事件不陌生,我们可以在 input 事件的回调函数里对输入内容进行即时处理,它的 event 参数有个 inputType 属性,会返回当前输入的类型:
event
insertText
insertFromPaste
insertCompositionText
insertFromDrop
deleteContentBackward
deleteContentForward
deleteByCut
更多类型请参阅:https://www.w3.org/TR/input-events-1/
有了输入类型我们就可以准确判断输入来源并做相应的处理了。下面我们利用这个特性来解决上面那个中文输入时提前上屏的问题:
<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; }
在 第 51 期(W3C 标准-JavaScript-事件):复合事件 中我们了解了复合事件,并利用复合事件解决了在文本框中输入中文时的提前上屏问题。本期要介绍的是
input
事件里的inputType
属性,利用它也可以解决上面那个问题。写过表单相关代码的同学应该对
input
事件不陌生,我们可以在input
事件的回调函数里对输入内容进行即时处理,它的event
参数有个inputType
属性,会返回当前输入的类型:insertText
键盘直接输入的insertFromPaste
通过粘贴进来的insertCompositionText
通过 IME 输入的insertFromDrop
通过拖放进来的deleteContentBackward
回退删除(按 backspace 键)deleteContentForward
前向删除(按 delete 键)deleteByCut
剪切删除(选中文本按 ctrl + X)有了输入类型我们就可以准确判断输入来源并做相应的处理了。下面我们利用这个特性来解决上面那个中文输入时提前上屏的问题: