<el-form-item> <el-input v-enter-integer-number></el-input> </el-form-item> <el-form-item> <el-button v-enter-integer-number></el-button> </el-form-item> <el-form-item> <el-select placeholder="请选择活动区域" v-enter-integer-number filterable ></el-select> </el-form-item> <el-form-item> <el-button v-enter-integer-number></el-button> </el-form-item> <el-form-item> <el-input v-enter-integer-number></el-input> </el-form-item> <el-form-item> <el-input v-enter-integer-number></el-input> </el-form-item> <el-form-item> <el-input v-enter-integer-number></el-input> </el-form-item>
import Vue from ‘vue‘; Vue.directive(‘EnterIntegerNumber‘, { inserted: function (event) { event.addEventListener(‘keyup‘, function (e: any) { e = e || window.event; //没有这一句,无法使用e.keyCode const txts = document.getElementsByTagName(‘input‘); //一个input标签的html集合 for (let i = 0; i < txts.length; i += 1) { const t: any = txts[i]; t.index = i; t.setAttribute(‘readonly‘, true); // t.preventDefault(); // 阻止事件的默认行为 t.onkeyup = function () { this.value = this.value.replace(/^(.).*$/, ‘$1‘); const next = t.index < txts.length - 1 ? this.index + 1 : this.index; //最后一次删除时,光标停留在当前位置而不是前一,否则最后一个数字无法回退删除 const prev = t.index < 1 ? this.index : this.index - 1; //同理,避免第一个数字prev为-1 if (e.keyCode !== 8) { if (next > txts.length - 1) return next; txts[next].removeAttribute(‘readonly‘); //只读 txts[next].focus(); } else { txts[prev].removeAttribute(‘readonly‘); txts[prev].focus(); } }; txts[0].removeAttribute(‘readonly‘); } }); } });