InpuEvent之妙用inputType属性

755 阅读2分钟

在一些需要限制输入类型的特殊情况下,inputType会经常被使用到,该属性存在于InputEvent对象中,当我们触发input的change或者input等事件后,事件对象便会是InputEvent类型。

input DOM

对于一个input DOM,抛开textarea的情况,我们能常用到的inputType属性为以下几种类型:

  • insertText
  • insertCompositionText
  • deleteContentBackward
  • historyUndo
  • historyRedo
  • insertFromPaste
  • deleteByCut
  • deleteByDrag
  • insertFromDrop

insertText

意为输入文本
会被标记为该种类型的输入会有以下几种情况:

  • 按下空格
  • 直接用键盘输入数字
  • 直接用键盘输入一个英文字母
  • 直接用键盘输入一个英文字符,包括以shift + x 形式输入的一个英文字符(标点符号)

textInput.gif
实际上,直接使用键盘输入一个英文体系内使用的字符,便会被标记inserText

insertCompositionText

意为输入组合文本
会被标记为该种类型的输入会有以下几种情况:

  • 直接用键盘输入一个中文字符(全角符号)
  • 使用输入法输入任意字符或确认输入法的输出

composition.gif
实际上,当我们使用非英文的输入法或可以联想输出的输入法时,都会被记为insertCompositionText类型。
当我们正在使用输入法进行拼写时,即使输入内容并没有在input框内显现,也会触发为insertCompositionText,当选定输出文本后,同样是触发为insertCompositionText

deleteContentBackward

意为删除光标前的字符
会被标记为该种类型的输入会有以下几种情况:

  • 直接按下backspace删除内容
  • 光标选中一段内容,按下backspace删除

GIF 2023-5-8 18-47-07.gif
总而言之,就是使用backspace删除内容

historyUndo 与 historyRedo

historyUndo即撤销上一次操作,而historyRedo为恢复上一次的撤销操作 如:

  • 按下ctrl + z撤销操作
  • 按下ctrl + y恢复撤销

GIF 2023-5-8 18-47-07.gif

insertFromPaste 与 deleteByCut

即:使用粘贴操作粘贴内容 和 通过剪切将内容删除

  • 如:ctrl + c 或 shift + insert
  • ctrl + x

GIF 2023-5-8 18-47-07.gif

deleteByDrag 与 insertFromDrop

分别是通过拖拽操作删除内容与通过拖拽插入内容
当我们使用鼠标选中一部分内容并将选中内容拖拽到其他地方插入,便会触发这两个输入操作
如果仅仅是将一段内容拖拽进入input框,仅会触发insert
同样仅仅拖拽删除,也只会触发delete
GIF 2023-5-8 18-47-07.gif
这个操作会同时先后触发两步:

  • deleteByDrag
  • insertFromDrop

使用技巧

现在,让我们使用以上内容来完成一个仅允许用户输入数字的要求

  1. 我们对上图input框添加beforeInput事件回调
  2. 在事件对象e中我们可以读取到inputType属性,接下来让我们进行一系列判断
  3. 我们可以读取到e.data属性,这个属性记录了本次输入的内容是什么
  4. balablablaba 未完。。。