input文本框强制输入指定文字的方法以及IE11的兼容

更新日期: 2019-03-06阅读: 3.5k标签: input

背景:最近开发的韩国项目,在用户姓名输入框一栏中,要求只能输入韩文,通常用到onkeyup和onafterpaste两个事件来触发方法,并在方法中进行校验,但是在IE浏览器中,出现了一种情况,就是韩文单词拼写未完成的时候,会直接进行校验并显示,并不是需要想要的结果,所以需要进行IE兼容;记录一下整个流程:


标签绑定事件

<input type="text" v-model="name" @keyup="keyup($event)" @afterpaste="keyup($event)">

标签绑定了onkeyup键盘抬起事件以及onafterpaste粘贴文本进输入框两个事件,当有这两个操作时,就会触发相应的校验方法;


校验方法

keyup (ev) {
  if (!this.imeStatus) {
    ev.target.value = ev.target.value.replace(/[^ㄱ-ㅎㅏ-ㅣ가-힣A-Za-z0-9]/g, '')
  }
},

当事件触发时,首先会有个变量imeStatus校验是否是IE浏览器,然后再根据正则校验进行输入框值的替换,注意:替换的应该是当前正在输入的值,并非整个输入框包括已经输入的所有值;

if (getBrowser() === 'IE') {
      window.addEventListener('compositionstart', () => {
        this.imeStatus = true
      }, false)
      window.addEventListener('compositionend', () => {
        this.imeStatus = false
      }, false)
    }

IE浏览器的校验:如果是IE浏览器,则对输入法事件进行监听,在输入法录入开始时,变量imeStatus为true,当前输入的值不进行校验,当输入法输入结束事件触发时,说明拼写完成,变量imeStatus为false,进行校验当前拼写输入完成的单词;

function getBrowser () {
  const userAgent = navigator.userAgent
  if (userAgent.indexOf('OPR') > -1) {
    return 'Opera'
  }
  if (userAgent.indexOf('Firefox') > -1) {
    return 'FF'
  }
  if (userAgent.indexOf('Trident') > -1) {
    return 'IE'
  }
  if (userAgent.indexOf('Edge') > -1) {
    return 'Edge'
  }
  if (userAgent.indexOf('Chrome') > -1) {
    return 'Chrome'
  }
  if (userAgent.indexOf('Safari') > -1) {
    return 'Safari'
  }
}

对浏览器的判断:navigator.userAgent获取当前浏览器信息;

来自:https://segmentfault.com/a/1190000018409594

链接: https://fly63.com/article/detial/2244

input的type类型

对部分生僻的input属性值解释:type=reset可以一键清空form表单里面所有的数据、datalist的运用: 输入框输入的值会自动匹配datalist下拉框的值,input的list属性值必须和datalist的id值一致

如何做一个听话的输入框

在移动端的web开发中,一提起输入框,程序猿(媛)肯定有很多可以吐槽的点。在输入框的运用中,小编也是很心累呀~ ios中,输入框获得焦点时,页面输入框被遮盖,定位的元素位置错乱

input 输入框如何强转大写的2种方式

需要把一个input输入框内的字母自动转变为大写。1.使用JavaScript,在input标签添加onkeyup方法,将字符转为大写。2.使用CSS,给input设置样式。

使input文本框不可编辑的3种方法

disabled 属性规定应该禁用 input 元素,被禁用的 input 元素,不可编辑,不可复制,不可选择,不能接收焦点,后台也不会接收到传值。readonly unselectable=”on” 该属性跟disable类似

placeholder样式设置_字体颜色大小

怎么修改input、textarea元素中的placeholder属性样式?冒号前写对应的input或textarea元素等。 样式修改包括:颜色 大小 位置

H5移动端 input输入完成后页面底部留白问题

最近在用vue写几个H5页面在微信上展示,遇到一个在弹窗上input输入完成之后点击键盘的完成,页面底部留出一片空白的问题,当键盘抬起时,window.scrollY会从0变到键盘的高度

纯 JS 设置文本框的默认提示

HTML5 中有个新特性叫 placeholder,一般用它来描述输入字段的预期值,适用于 text、search、password 等类型的 input 以及 textarea。对用户来说,placeholder 就是文本框中的输入提示信息,往往是对预期值或预期格式的简短描述

Angular input中setter和getter的使用

Input 是Angular内部的属性装饰器,用来定义组件内的输入属性。在实际应用场合,通常用来实现父组件向子组件传递数据。有时候子组件单据的接收父组件传递过来的数据,不符合需求,需要另外处理数据

input 禁止输入特殊字符

方式一:拿到value值以后 在你传递之前处理;方式二:从最根本上也就是提示用户输入不了特殊字符;方式三:onkeyup事件 拿到以后去匹配 跟方式一类似;

可以使用css的方式让input不能输入文字吗?

在使用一个js插件时,不想让用户点击input输入和触发那个下拉框,用css的方式有什么方法?readonly和disabled都要写到标签上,但input都是这个插件生成的,有什么好的方法解决吗?

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!