el-input 限制只能输入负数、正数或2位小数的数值

发布于:2025-04-20 ⋅ 阅读:(77) ⋅ 点赞:(0)

需求

el-input需要指定输入格式,当键盘事件触发时限制只能输入负数、正数或2位小数的数值。

解决方案

自定义校验数字输入的键盘事件方法函数。

具体实现步骤

1、创建验数字输入的键盘事件方法

 /**
 * 校验数字输入的键盘事件
 * @param {Event} event - 键盘事件对象
 * @param {Object} options - 配置项
 * @param {boolean} options.allowNegative - 是否允许负数,默认true
 * @param {boolean} options.allowDecimal - 是否允许小数,默认true
 * @param {number} options.decimalPlaces - 小数位数,默认2
 * @returns {boolean} - 返回是否允许当前输入
 */
validateNumberKeypress(event, options = {}) {
  const { allowNegative = true, allowDecimal = true, decimalPlaces = 2 } = options
  const keyCode = event.keyCode ? event.keyCode : event.which

  // 允许数字
  const isNumber = keyCode >= 48 && keyCode <= 57
  // 允许负号
  const isDash = keyCode === 45 && allowNegative
  // 允许小数点
  const isDot = keyCode === 46 && allowDecimal

  // 如果不是允许的字符,阻止输入
  if (!isNumber && !isDash && !isDot) {
    event.preventDefault()
    return false
  }

  const value = event.target.value
  // 如果是负号,只允许在开头输入一次
  if (isDash && value.includes('-')) {
    event.preventDefault()
    return false
  }

  // 如果是小数点,只允许输入一次
  if (isDot && value.includes('.')) {
    event.preventDefault()
    return false
  }

  // 限制小数位数
  if (allowDecimal && value.includes('.')) {
    const parts = value.split('.')
    if (parts[1] && parts[1].length >= decimalPlaces && isNumber) {
      event.preventDefault()
      return false
    }
  }

  return true
}

2、el-input绑定校验方法

  <el-input
     v-model="formInfo.amountYear"
     clearable
     @click.native.stop
     @keypress.native="onlyNumber"
   ></el-input>

写在最后

validateNumberKeypress可直接复制进行使用,最好加上@click.native.stop防止事件冒泡。


网站公告

今日签到

点亮在社区的每一天
去签到