IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ie 8 9低版本input下的兼容问题(vue/iview/iview-design) -> 正文阅读

[JavaScript知识库]ie 8 9低版本input下的兼容问题(vue/iview/iview-design)

事件背景:项目使用了view+iview做的项目,需要在ie低版本浏览器下做兼容

问题代码:

// template 
<i-col span="4">
          <Input
            v-model="pickerMobile"
            clearable
            :maxlength="11"
            autocomplate="off"
            placeholder="请输入手机号码"
            @on-change="checkPickerMobile"
            class=""
          />
        </i-col>

// method
checkPickerMobile: debounce(function () {
      if (!validatemobile(this.pickerMobile, false)) {
        this.$Message.warning('手机号有误')
        return false
      }
    }, 1500),

事件描述:ie浏览器下,会自动执行?@on-change="checkPickerMobile" 方法,但这不是我想要的

查看iview源码:

// template
<input
                :id="elementId"
                :autocomplete="autocomplete"
                :spellcheck="spellcheck"
                ref="input"
                :type="currentType"
                :class="inputClasses"
                :placeholder="placeholder"
                :disabled="itemDisabled"
                :maxlength="maxlength"
                :readonly="readonly"
                :name="name"
                :value="currentValue"
                :number="number"
                :autofocus="autofocus"
                @keyup.enter="handleEnter"
                @keyup="handleKeyup"
                @keypress="handleKeypress"
                @keydown="handleKeydown"
                @focus="handleFocus"
                @blur="handleBlur"
                @compositionstart="handleComposition"
                @compositionupdate="handleComposition"
                @compositionend="handleComposition"
                @input="handleInput"
                @change="handleChange">

// method
 handleInput (event) {
                if (this.isOnComposition) return;

                let value = event.target.value;
                if (this.number && value !== '') value = Number.isNaN(Number(value)) ? value : Number(value);
                this.$emit('input', value);
                this.setCurrentValue(value);
                this.$emit('on-change', event);
            },
            handleChange (event) {
                console.log("handleChange")
                this.$emit('on-input-change', event);
            },

从中可以看出,iview的?on-change实际上监听的是input

?问题的根源:vue在渲染html模版的时候,如果模版中有类似如下的代码,input 被初始化赋值,即使赋了空值(即input值没有发生改变)@input事件也会触发

但是在其他浏览器,Chrome, Firefox, Edge, Safari 则不会触发@input 事件

问题解决方案:

1、笨拙的方法,在不看源码的情况下,利用中间变量,初始值来处理

checkIdcard: debounce(function () {
        // 判断是否首次进入
      if (this.firstRequestIdCard) {
        this.firstRequestIdCard = false
        return
      }
      if (!isCardNo(this.pickerIdcard)) {
        this.$Message.warning('身份证号码有误')
        return false
      }
    }, 2000),

2、根源解决,监听input的change事件,而不是input事件,使用@on-input-change方法

<i-col span="6">
          <Input
            v-model="pickerIdcard"
            clearable
            autocomplate="off"
            placeholder="请输入身份证"
            @on-input-change="checkIdcard"
            class=""
          />

PS: iview本身提供了@on-input-change的方法,但是官方api文档并未说明和提供??https://www.iviewui.com/components/inputhttps://www.iviewui.com/components/input

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:27:11  更:2022-03-04 15:29:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:03:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码