在一些需要限制输入类型的特殊情况下,inputType会经常被使用到,该属性存在于InputEvent对象中,当我们触发input的change或者input等事件后,事件对象便会是InputEvent类型。
input DOM
对于一个input DOM,抛开textarea的情况,我们能常用到的inputType属性为以下几种类型:
- insertText
- insertCompositionText
- deleteContentBackward
- historyUndo
- historyRedo
- insertFromPaste
- deleteByCut
- deleteByDrag
- insertFromDrop
insertText
意为输入文本
会被标记为该种类型的输入会有以下几种情况:
- 按下空格
- 直接用键盘输入数字
- 直接用键盘输入一个英文字母
- 直接用键盘输入一个英文字符,包括以shift + x 形式输入的一个英文字符(标点符号)
实际上,直接使用键盘输入一个英文体系内使用的字符,便会被标记inserText
insertCompositionText
意为输入组合文本
会被标记为该种类型的输入会有以下几种情况:
- 直接用键盘输入一个中文字符(全角符号)
- 使用输入法输入任意字符或确认输入法的输出
实际上,当我们使用非英文的输入法或可以联想输出的输入法时,都会被记为insertCompositionText类型。
当我们正在使用输入法进行拼写时,即使输入内容并没有在input框内显现,也会触发为insertCompositionText,当选定输出文本后,同样是触发为insertCompositionText
deleteContentBackward
意为删除光标前的字符
会被标记为该种类型的输入会有以下几种情况:
- 直接按下backspace删除内容
- 光标选中一段内容,按下backspace删除
总而言之,就是使用backspace删除内容
historyUndo 与 historyRedo
historyUndo即撤销上一次操作,而historyRedo为恢复上一次的撤销操作 如:
- 按下ctrl + z撤销操作
- 按下ctrl + y恢复撤销
insertFromPaste 与 deleteByCut
即:使用粘贴操作粘贴内容 和 通过剪切将内容删除
- 如:ctrl + c 或 shift + insert
- ctrl + x
deleteByDrag 与 insertFromDrop
分别是通过拖拽操作删除内容与通过拖拽插入内容
当我们使用鼠标选中一部分内容并将选中内容拖拽到其他地方插入,便会触发这两个输入操作
如果仅仅是将一段内容拖拽进入input框,仅会触发insert
同样仅仅拖拽删除,也只会触发delete
这个操作会同时先后触发两步:
- deleteByDrag
- insertFromDrop
使用技巧
现在,让我们使用以上内容来完成一个仅允许用户输入数字的要求
- 我们对上图input框添加beforeInput事件回调
- 在事件对象e中我们可以读取到inputType属性,接下来让我们进行一系列判断
- 我们可以读取到e.data属性,这个属性记录了本次输入的内容是什么
- balablablaba 未完。。。