ios,安卓 input禁止输入方式

17 篇文章 0 订阅
3 篇文章 0 订阅

input禁止输入

  • 只能输入数字、汉字、英文
  • 文本合成系统如 input method editor (即输入法编辑器)开始新的输入合成时会触发 compositionstart 事件
  • 当文本段落的组成完成或取消时, compositionend 事件将被触发
<!-- 代码为vue实例 -->
<input type="text" v-model="contactName" @compositionstart="onCompositionStart" @compositionend="onCompositionEnd" @input="nameInputfn"/>
<input type="number" v-model="contactPhone" pattern="[0-9]*" @input="phoneInputfn"/>
data () {
  return {
    lock: false, // 初始化 默认
    androidNumber: '' //安卓input 数据存储
  }
}
// 文本输入框
// 禁止输入 开始触发
onCompositionStart() {
    this.lock = true;
},
// 完成文本
onCompositionEnd(e) {   
    // 输入中文触发      
    this.lock = false;
    // 在调用
    this.nameInputfn(e);
},
// 监听输入
nameInputfn (e) {
    if (!this.lock)  {
        this.contactName = e.target.value = e.target.value.replace(/[^\w\u4E00-\u9FA5]/g,'')
    }
}
// 数字输入框
// type= number && pattern="[0-9]*" 调取IOS纯数字键盘,安卓数字键盘
phoneInputfn (e) {
  let targetValue = e.target.value
  let u = window.navigator.userAgent
  // 安卓数字键盘 + - 会清空input值  需要加外部变量androidNumber存储
  var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1;
  if (isAndroid) {
    targetValue && (this.androidNumber = targetValue)
    if (['+','-'].includes(e.data)) {
      // DOM更新延迟数据回调 赋值
      this.$nextTick(()=>{
        this.contactPhone = e.target.value = this.androidNumber
      })
    }
  }
  // type= number 类型maxlength 失去作用
  if (this.contactPhone.length>11) {
    this.contactPhone = this.contactPhone.slice(0, 11)
    return
  }
  // 清空不是数字正则
  this.contactPhone = e.target.value = targetValue.replace(/[^0-9]/g,'')
}

博客迁移

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值