当前位置: 首页 > article >正文

vue3自定义指令实现输入框值范围大小限制

// 自定义指令代码
export default (vue: any) => {
  const handler = ($event: Event) => {
    const inputEl = $event.target as HTMLInputElement;
    let maxValue = inputEl.max ? parseFloat(inputEl.max) : 0;
    let minValue = inputEl.min ? parseFloat(inputEl.min) : 0;
    let value = parseFloat(inputEl.value);
    if (isNaN(value)) {
      inputEl.value = "";
    } else if (value > maxValue) {
      inputEl.value = maxValue.toString();
    } else if (value < minValue) {
      inputEl.value = minValue.toString();
    } else {
      inputEl.value = value.toString();
    }
  };

  vue.directive("limit", {
    mounted(el, binding, vnode) {
      let child = el.children[0].children[0] as HTMLInputElement; // 获取到 Input 元素
      child.addEventListener("input", handler); // 添加监听
    },
    unmounted(el, binding, vnode) {
      let child = el.children[0].children[0] as HTMLInputElement; // 获取到 Input 元素
      child.removeEventListener("input", handler); // 移除监听
    }
  });
};

main.ts中引入

import limitPlugins from "./utils/limitPlugins";
const app = createApp(App);
app.use(limitPlugins);

组件上使用,这里用的是element-plus里面的el-input组件,在其他ui库使用,需更改自定义指令里面的代码,找到input输入框就行了

<el-input
	v-model="formData!.qualityOfService"
	v-limit
	min="0"
	max="10"
	type="number"
	placeholder="请输入服务质量"
/>

http://www.kler.cn/a/581457.html

相关文章:

  • Spring AI 1.0.0 M6新特性MCP
  • yolov8自定义实例分割
  • 清华大学出品《DeepSeek从入门到精通》超详细使用手册pdf
  • React学习笔记14
  • 从零构建 KNN 分类: sklearn 与自定义实现对比
  • JMeter使用BeanShell断言
  • 训练大模型LLM选择哪种开发语言最好
  • 前端开发中的设计模式:策略模式的应用与实践
  • C#的判断语句总结
  • Ubuntu开荒
  • llvm数据流分析
  • 【1688】崖山集群YAC安装备忘
  • 【软件设计】23 种设计模式解析与实践指南
  • bash---括号之间的区别
  • 『PostgreSQL』PGSQL备份与还原实操指南
  • kubernetes——part3-5 核心概念 Service
  • 《基于深度学习的图像修复技术研究与应用-图像修复》—3000字论文模板
  • golang从入门到做牛马:第十五篇-Go语言切片(Slice):动态数组的“魔法”
  • 【编程题】7-6 列出连通集
  • 电力行业能源管理系统(Energy Management System, EMS)的技术实现方案