vue2自定義指令實現 el-input 輸入數字,小數點兩位 最高10位,不滿足則截取符合規則的值作為新值

步驟 1:創建自定義指令

// 處理輸入值,確保符合規則
function processValue(value) {// 過濾非數字和小數點let filtered = value.replace(/[^\d.]/g, '');const firstDotIndex = filtered.indexOf('.');// 處理多個小數點,保留第一個if (firstDotIndex !== -1) {filtered = filtered.substring(0, firstDotIndex + 1) + filtered.substring(firstDotIndex + 1).replace(/\./g, '');}// 分割整數和小數部分const parts = filtered.split('.');let integerPart = (parts[0] || '').slice(0, 10); // 整數最多10位let decimalPart = parts.length > 1 ? parts[1].slice(0, 2) : ''; // 小數最多兩位// 處理以小數點開頭的情況(如 ".98" → "0.98")if (filtered.startsWith('.') && integerPart === '') {integerPart = '0';}// 組合結果let newValue = integerPart;if (parts.length > 1 || filtered.endsWith('.')) {newValue += '.' + decimalPart;}return newValue;
}// 注冊自定義指令
Vue.directive('number', {bind(el, binding, vnode) {const input = el.querySelector('input.el-input__inner');if (!input) return;let composing = false; // 標記是否在輸入法組合中const handler = (e) => {if (composing) return;const newVal = processValue(e.target.value);if (e.target.value !== newVal) {e.target.value = newVal;input.dispatchEvent(new Event('input', { bubbles: true })); // 觸發更新}};// 輸入法處理const compositionStart = () => { composing = true; };const compositionEnd = (e) => {composing = false;handler(e);};input.addEventListener('compositionstart', compositionStart);input.addEventListener('compositionend', compositionEnd);input.addEventListener('input', handler);// 保存處理函數以便解綁el._numberHandlers = { compositionStart, compositionEnd, handler };// 初始值處理const initialValue = vnode.componentInstance?.value ?? input.value;const processedVal = processValue(initialValue);if (initialValue !== processedVal) {vnode.componentInstance?.$emit('input', processedVal);}},update(el, binding, vnode) {const input = el.querySelector('input.el-input__inner');const currentValue = vnode.componentInstance?.value ?? input?.value;if (currentValue === undefined) return;const newVal = processValue(currentValue);if (currentValue !== newVal) {vnode.componentInstance?.$emit('input', newVal);}},unbind(el) {const input = el.querySelector('input.el-input__inner');if (input && el._numberHandlers) {const { compositionStart, compositionEnd, handler } = el._numberHandlers;input.removeEventListener('compositionstart', compositionStart);input.removeEventListener('compositionend', compositionEnd);input.removeEventListener('input', handler);delete el._numberHandlers;}}
});

步驟 2:在組件中使用指令

<template><el-input v-number v-model="inputValue"></el-input>
</template><script>
export default {data() {return {inputValue: ''};}
};
</script>

功能說明

  1. 過濾非數字字符:只允許輸入數字和小數點。
  2. 限制小數點數量:確保只保留第一個小數點,后續的自動移除。
  3. 整數部分限制:最多輸入 10 位整數,超長部分截斷。
  4. 小數部分限制:最多輸入 2 位小數,超長部分截斷。
  5. 輸入法兼容:處理中文輸入法狀態,避免中途過濾。
  6. 初始值處理:當初始值不符合規則時自動修正。
  7. 實時更新:通過觸發 input 事件確保 v-model 同步更新。

注意事項

  • 該指令依賴于 Element UI 的 el-input 結構,確保內部輸入框的類名為 el-input__inner
  • 處理后的值會覆蓋用戶輸入,確保始終符合規則。
  • 支持輸入法組合輸入(如中文拼音),提升用戶體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73714.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73714.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73714.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

10、基于osg引擎生成熱力圖高度圖實現3D熱力圖可視化、3D熱力圖實時更新(帶過渡效果)

1、結果 2、完整C代碼 #include <sstream> #include <iomanip> #include <iostream> #include <vector> #include <random> #include <cmath> #include <functional> #include <osgViewer/viewer> #include <osgDB/Read…

海量數據查詢加速:Presto、Trino、Apache Arrow

1. 引言 在大數據分析場景下,查詢速度往往是影響業務決策效率的關鍵因素。隨著數據量的增長,傳統的行存儲數據庫難以滿足低延遲的查詢需求,因此,基于列式存儲、向量化計算等技術的查詢引擎應運而生。本篇文章將深入探討 Presto、Trino、Apache Arrow 三種主流的查詢優化工…

Pycharm 社區版安裝教程

找到安裝包雙擊安裝文件---點擊下一步 一般路徑是&#xff1a;C:\Rambo\Software\Development 選擇完成后就是如下地址&#xff1a; C:\Rambo\Software\Development\PyCharm Community Edition 2024.3.3 點擊上述3個位置就可以了----下一步 等待安裝就可以了---完成后點擊完成…

vue3 elementUi table自由渲染組件

文章目錄 前言CustomTable如何使用tableColumn 屬性h函數創建原生元素創建組件動態生成 前言 elementui中的table組件&#xff0c;表格中想要自由地渲染內容&#xff0c;是一種比較麻煩的事情&#xff0c;比如你表格中想要某一列插入一個button按鈕&#xff0c;是不是要用插槽…

Mermaid 子圖 + 拖拽縮放:讓流程圖支持無限細節展示

在技術文檔、項目管理和可視化分析中&#xff0c;流程圖是傳遞復雜邏輯的核心工具。傳統流程圖往往靜態且難以適應細節展示&#xff0c;而 Mermaid 與 svg-pan-zoom 的結合&#xff0c;則為這一痛點提供了完美解決方案。本文將深入解析如何通過 Mermaid 的子圖&#xff08;subg…

前端權限系統

前端權限系統是為了確保用戶只能訪問他們有權限查看的資源而設計的。在現代前端開發中&#xff0c;權限控制不僅僅是簡單的顯示或隱藏元素&#xff0c;還涉及到對路由、組件、數據和操作權限的細致控制。下面是前端權限系統的常見設計方案和實現步驟。 前端權限系統的組成部分 …

Nature | TabPFN:表格基礎模型用于小規模數據分析

表格數據是按行和列組織的電子表格形式&#xff0c;在從生物醫學、粒子物理到經濟學和氣候科學等各個科學領域中無處不在 。基于表格其余列來填充標簽列缺失值的基本預測任務&#xff0c;對于生物醫學風險模型、藥物研發和材料科學等各種應用至關重要。盡管深度學習徹底改變了從…

c++學習系列----003.寫文件

c 寫文件 文章目錄 c 寫文件1?? 使用 ofstream 寫入文本文件2?? 追加模式寫入3?? 寫入二進制文件4?? 使用 fstream 進行讀寫5?? 使用 fprintf()&#xff08;C 方式&#xff09;6?? 使用 write() 低級 I/O 方式推薦方式 C 寫文件的幾種方式主要有以下幾種&#xff1…

C語言及內核開發中的回調機制與設計模式分析

在C語言以及操作系統內核開發中,回調機制是一種至關重要的編程模式。它通過注冊框架和定義回調函數,實現了模塊間的解耦和靈活交互,為系統的擴展性和可維護性提供了有力支持。本文將深入探討這種機制的工作原理、應用場景以及與設計模式的關聯。 一、回調機制的核心概念 (…

淺談StarRocks SQL性能檢查與調優

StarRocks性能受數據建模、查詢設計及資源配置核心影響。分桶鍵選擇直接決定數據分布與Shuffle效率&#xff0c;物化視圖可預計算復雜邏輯。執行計劃需關注分區裁剪、謂詞下推及Join策略&#xff0c;避免全表掃描或數據傾斜。資源層面&#xff0c;需平衡并行度、內存限制與網絡…

stable Diffusion 中的 VAE是什么

在Stable Diffusion中&#xff0c;VAE&#xff08;Variational Autoencoder&#xff0c;變分自編碼器&#xff09;是一個關鍵組件&#xff0c;用于生成高質量的圖像。它通過將輸入圖像編碼到潛在空間&#xff08;latent space&#xff09;&#xff0c;并在該空間中進行操作&…

從零開始 | C語言基礎刷題DAY3

?個人主頁&#xff1a;折枝寄北的博客 目錄 1.打印3的倍數的數2.從大到小輸出3. 打印素數4.打印閏年5.最大公約數 1.打印3的倍數的數 題目&#xff1a; 寫一個代碼打印1-100之間所有3的倍數的數字 代碼&#xff1a; int main(){int i 0;for (i 1; i < 100; i){if (i % …

告別死鎖!Hyperlane:Rust 異步 Web 框架的終極解決方案

告別死鎖&#xff01;Hyperlane&#xff1a;Rust異步Web框架的終極解決方案 &#x1f525; 為什么選擇Hyperlane&#xff1f; Hyperlane是專為Rust開發者打造的高性能異步Web框架&#xff0c;通過革命性的并發控制設計&#xff0c;讓您徹底擺脫多線程編程中的死鎖噩夢。框架內…

CLR中的類型轉換

CLR中的類型轉換 字符串類型轉換容器類型轉換自定義類型相互轉換項目設置CLR(Common Language Runtime,公共語言運行時)是微軟.NET框架的核心組件,是微軟對 CLI 標準的具體實現,負責管理和執行托管代碼,提供跨語言互操作性、內存管理、安全性等關鍵服務CLR的類型轉換機制…

QT5.15.2加載pdf為QGraphicsScene的背景

5.15.2使用pdf 必須要安裝QT源碼&#xff0c;可以看到編譯器lib目錄已經有pdf相關的lib文件&#xff0c;d是debug 1.找到源碼目錄&#xff1a;D:\soft\QT\5.15.2\Src\qtwebengine\include 復制這兩個文件夾到編譯器的包含目錄中:D:\soft\QT\5.15.2\msvc2019_64\include 2.找…

MCP 開放協議

本文翻譯整理自&#xff1a; https://modelcontextprotocol.io/introduction 文章目錄 簡介一、關于 MCP二、為什么選擇MCP&#xff1f;通用架構 三、開始使用1、快速入門2、示例 四、教程五、探索 MCP六、貢獻和支持反饋貢獻支持和反饋 服務器開發者一、構建服務器1、我們將要…

主流區塊鏈

文章目錄 主流鏈1. Solana特點&#xff1a;適用場景&#xff1a;工具鏈&#xff1a; 2. Binance Smart Chain (BSC)特點&#xff1a;適用場景&#xff1a;工具鏈&#xff1a; 3. Avalanche特點&#xff1a;適用場景&#xff1a;工具鏈&#xff1a; 4. Polkadot特點&#xff1a;…

GaussDB備份數據常用命令

1、常用備份命令gs_dump 說明&#xff1a;是一個服務器端工具&#xff0c;可以在線導出數據庫的數據&#xff0c;這些數據包含整個數據庫或數據庫中指定的對象&#xff08;如&#xff1a;模式&#xff0c;表&#xff0c;視圖等&#xff09;&#xff0c;并且支持導出完整一致的數…

ctfshow-萌新賽刷題筆記

1. 給她 啟動靶機&#xff0c;發現是sql注入&#xff0c;嘗試后發現被轉義\&#xff0c;思路到這里就斷了&#xff0c;再看題目給她&#xff0c;想到git.有可能是.git文件泄露&#xff0c;dirsearch掃描一下果然是&#xff0c;用GitHack看一下git備份文件&#xff0c;得到hint…

Transformer:GPT背后的造腦工程全解析(含手搓過程)

Transformer&#xff1a;GPT背后的"造腦工程"全解析&#xff08;含手搓過程&#xff09; Transformer 是人工智能領域的革命性架構&#xff0c;通過自注意力機制讓模型像人類一樣"全局理解"上下文關系。它摒棄傳統循環結構&#xff0c;采用并行計算實現高…