当前位置: 首页 > 知识库问答 >
问题:

javascript - vue指令 在未使用的此指令的input框中起作用了是为什么?

子车鸿运
2023-11-29

自定义全局指定校验输入框只能输入数字

Vue.directive('validateNumber', {    bind(el, binding, vnode) {        let lastData = null        el.onkeyup = (e) => {            if (String.fromCharCode(e.keyCode) == 'E' || String.fromCharCode(e.keyCode) == 'KeyE') {                e.target.value = lastData                return false            } else {                lastData = e.target.value            }            e.target.value = e.target.value.replace(/[^\d]/ig, '')                        let _this = vnode.context            _this.accessNestedObject(_this, vnode.data.model.expression, e.target.value)                        if (!!binding.expression && !!e.target.value) {                let obj = (new Function("return " + binding.expression))()                let keys = Object.keys(obj)                let values = Object.values(obj)                if (keys[0] == 'min') {                    if (e.target.value < values[0])                        e.target.value = values[0]                }                if (keys[1] == 'max') {                    if (e.target.value > values[1])                        e.target.value = values[1]                }            }            el.dispatchEvent(new Event('input'))        }    }})

给第一个输入框参加此验证,第二个输入框不带验证,但是第二个输入框自动进入此校验,不能输入除数字外的其他字符,这是为什么?

<el-form-item label="等待时间" prop="timeInterval">                <el-input                  type="number"                  v-model="alertRulesForm.timeInterval"                  id="alarm-rule-time-interval"                  style="width:100%"                  v-validateNumber                >                  <template slot="append">秒</template>                </el-input>              </el-form-item><el-form-item label="空间间隔" prop="distanceInterval">                <el-input                  type="number"                  v-model="alertRulesForm.distanceInterval"                  id="alarm-rule-distance-interval"                >                  <template slot="append">米</template>                </el-input>              </el-form-item>

没有任何头绪

共有2个答案

甄胡非
2023-11-29

第二个输入框自动进入此校验这个你是怎么判断的,在el.onkeyup中监听到事件被触发了吗。

不能输入除数字外的其他字符,这是为什么?你的el-input设置了type="number"这本身就限制了只能输入数字和小数点

乌学博
2023-11-29

这个问题可能是由于 Vue 的指令是全局注册的,因此你在一个元素上注册了一个自定义指令,它可能会影响到其它没有注册这个指令的元素。在你的例子中,你在一个输入框中注册了 v-validateNumber 指令,然后它似乎也影响到了其它的输入框。

这个问题可以通过在每个输入框中单独注册这个指令来解决,而不是全局注册。例如:

<el-form-item label="等待时间" prop="timeInterval">  <el-input    type="number"    v-model="alertRulesForm.timeInterval"    id="alarm-rule-time-interval"    style="width:100%"    v-validateNumber    v-slot:append="() => {/* 阻止默认行为 */}"  >    <template slot="append">秒</template>  </el-input></el-form-item><el-form-item label="空间间隔" prop="distanceInterval">  <el-input    type="number"    v-model="alertRulesForm.distanceInterval"    id="alarm-rule-distance-interval"    v-slot:append="() => {/* 阻止默认行为 */}"  >    <template slot="append">米</template>  </el-input></el-form-item>

在上述代码中,我添加了 v-slot:append="() => {/* 阻止默认行为 */}",这将阻止 append 插槽的默认行为,这样你的自定义指令就不会影响到其它的输入框了。

此外,你还需要确保你的自定义指令只绑定到期望的元素上,并且没有使用全局数据。在某些情况下,全局数据可能会导致指令的行为异常。

 类似资料:
  • 1. 简介 本小节我们将介绍在 Vue 项目中常用的一些指令。包括每个指令的含义以及如何使用他们。我们在日常项目中会大量的使用指令,指令是 Vue 中相对基础和简单的知识点。同学们只需要了解每个指令的含义,对案例中的代码反复练习就可以熟练掌握。 2. 慕课解释 指令 (Directives) 是带有 v- 前缀的特殊 attribute。指令 attribute 的值预期是单个 JavaScrip

  • 本文向大家介绍Vue指令指令大全,包括了Vue指令指令大全的使用技巧和注意事项,需要的朋友参考一下 1. v-text v-text主要用来更新textContent,可以等同于JS的text属性。 这两者等价: 2. v-html 双大括号的方式会将数据解释为纯文本,而非HTML。为了输出真正的HTML,可以用v-html指令。它等同于JS的innerHtml属性。 这个div的内容将会替换成属

  • 问题内容: 我有一个Dockerfile,我正在将其安装在一起以安装Vanilla python环境(稍后将在其中安装应用程序)。 构建运行正常,直到最后一行,我得到以下异常: 如果我进入该目录(只是为了测试是否已完成前面的步骤),我可以看到文件按预期存在: 如果我尝试仅运行命令,则会收到与上述相同的“未找到”错误。但是,如果我运行交互式shell会话,则源代码确实可以工作: 我可以从这里运行脚本

  • 我有一个Dockerfile,我将把它放在一起安装一个vanilla python环境(我将在其中安装一个应用程序,但以后再安装)。 构建运行正常,直到最后一行,我得到以下异常: 从Dockerfile运行指令运行shell脚本的最佳方法是什么来解决这个问题(我运行Ubuntu12.04LTS的默认基本映像)。

  • 我读过,x86的INC指令不是原子指令。我的问题是为什么会这样?假设我们在x86-64上递增一个64位整数,我们可以用一条指令来递增,因为INC指令同时处理内存变量和寄存器。那么为什么它不是原子的呢?

  • 我参考了下面的oracle jvm文档 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.pop 弹出操作弹出操作数堆栈顶部的值 总体安排 pop表格pop=87(0x57) 操作堆栈...,值→ ... 说明从操作数堆栈中弹出顶部值。 除非值是1类计算类型的值(§2.11.1),否则不得使用pop指令。