element input 只能输入数字_element-ui的InputNumber计数器组件跳过指定数字

b2a571ac3aba4ba85915d9ea92b0e7bb.png

从官方文档上可知该组件允许定义递增递减的步数控制:

<

但是却不支持跳过指定的某数字,例如:

<template>
  <el-input-number v-model="num" :step="32" :min="32" :max="128" step-strictly></el-input-number>
</template>
<script>
  export default {
    data() {
      return {
        num: 2
      }
    }
  };
</script>

设定指定步长为32,最小值为32,最大值为128时,该组件会输入32,64,96,128这四个数字,然而实际需求中会出现跳过某个数的需求,那么该怎么做呢? 直接上代码(一个vue指令)

<el-input-number
	v-model="configForm.batch"
	<!--skip为跳过的值,left为当点击'减'时跳过96后显示的值,right则为'加'时跳过96后显示的值-->
	v-skipNumber="{ left: 64, skip: 96, right: 128 }"
	:min="32"
	:max="128"
	:step="32"
	step-strictly
></el-input-number>
..........
Vue.directive("skipNumber", {
	update(el, binding, vnode) {
	  const element = el.getElementsByTagName("input")[0];
	  <!--获取旧值-->
	  const oldValue = element.value;
	  <!--获取当前值-->
	  const currentValue = vnode.data.model.value;
	  const skip = binding.value.skip;
	  const left = binding.value.left;
	  const right = binding.value.right;
	  <!--判断点击的是加还是减-->
	  <!--加-->
	  if (currentValue > oldValue) {
	   if (currentValue === skip) {
	   <!--使用回调使值生效-->
	     vnode.data.model.callback(right);
	   }
	  <!--减-->
	  } else {
	      if (currentValue === skip) {
	        vnode.data.model.callback(left);
	      }
	  }
	},
});

当然也可以在change回调中使用类似方法实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值