自定义全局指定校验输入框只能输入数字
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>
没有任何头绪
第二个输入框自动进入此校验
这个你是怎么判断的,在el.onkeyup中监听到事件被触发了吗。
不能输入除数字外的其他字符,这是为什么?
你的el-input设置了type="number"
这本身就限制了只能输入数字和小数点
这个问题可能是由于 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指令。