成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue中實現輸入框Input輸入限制

開發
在開發過程中,基本都遇到過需要限制輸入的情況,比如金額、僅字母數字、可輸入小數位等,網上搜了很多方法也遇到一些坑,所以分享出來。

[[343734]]

1.使用修飾符實現數字輸入
在VUE中可以在v-modal后添加修飾符的形式來限制輸入,比如:

  1. <input v-model.number="testValue" type="number"

 .number可以實現限制數字輸入,但是會有以下問題:

會出現type="number"自帶樣式,當然可以通過添加以下css清除

  1. /* 普通IE瀏覽器 樣式清除 */ 
  2. input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{ 
  3. -webkit-appearance: none !important; 
  4. /* 火狐瀏覽器樣式清除 */ 
  5. input[type="number"]{ 
  6. -moz-appearance:textfield; 

可以無限輸入特殊符號+-.,會導致清空data中的值testValue 這里的修飾符也無法實現定制限制輸入,不能滿足要求
2.監聽輸入框變化
通過@input監聽更新數據,實現只能輸入數字,而且可以自行定制限制輸入內容

  1. <input v-model="testValue" @input="testValue = testValue.replace(/[^\d]/g,'')"

此方法可以滿足需求,但是無法封裝進行批量使用

3.封裝全局指令
封裝input限制輸入指令

  1. //input.js 
  2.  
  3. const addListener = function(el, type, fn) { 
  4.   el.addEventListener(type, fn, false
  5.  
  6. //去掉空格 
  7. const spaceFilter = function(el) { 
  8.   addListener(el, 'input', () => { 
  9.     el.value = el.value.replace(/\s+/, ''
  10.   }) 
  11.  
  12. // 限制只能輸入整數和小數(價格類、最多兩位小數) 
  13. const priceFilter = function(el) { 
  14.   addListener(el, 'input', () => { 
  15.     el.value = (el.value.match(/^\d*(\.?\d{0,2})/g)[0]) || null 
  16.     if (isNaN(el.value)) { 
  17.       el.value = '' 
  18.     } 
  19.   }) 
  20.  
  21. export default { 
  22.   bind(el, binding) { 
  23.     if (el.tagName.toLowerCase() !== 'input') { 
  24.       el = el.getElementsByTagName('input')[0] 
  25.     } 
  26.     spaceFilter(el) 
  27.     switch (binding.arg) { 
  28.       case 'price'
  29.         priceFilter(el) 
  30.         break 
  31.       default
  32.         console.warn('未知指令類型',binding.arg) 
  33.         break 
  34.     } 
  35.   } 
  36. 注冊全局自定義指令 
  37.  
  38. //main.js 
  39.  
  40. import inputFilter from '@/directives/InputFilter.js' 
  41.  
  42. Vue.directive('inputFilter', inputFilter) 

使用v-input-filter指令

  1. <input v-modal="testValue" v-input-filter:price> 

這樣封裝在使用時會出現一個隱蔽的bug,就是在輸入指令中正則限制以外的字符時,視圖中輸入框顯示是正確的,但是在瀏覽器控制欄Vue Devtools中的testValue最后一位字符是最后輸入的時的字符。

比如輸入abc、123abc輸入框內是 、123,但實際testValue值是c、123c。

原因是vue中綁定的值是通過監聽input進行賦值的,直接修改輸入框值不會觸發input事件,需要通過dispatchEvent再次手動觸發input事件,修改如下:

  1. //input.js 
  2.  
  3. ··· 
  4.  
  5. // 防抖 
  6. let debounce = (fn, delay) => { 
  7.   var delay = delay || 100; 
  8.   var timer; 
  9.   return function() { 
  10.     var th = this; 
  11.     var args = arguments; 
  12.     if (timer) { 
  13.       clearTimeout(timer); 
  14.     } 
  15.     timer = setTimeout(function() { 
  16.       timer = null
  17.       fn.apply(th, args); 
  18.     }, delay); 
  19.   }; 
  20.  
  21. ··· 
  22.  
  23. // 限制只能輸入整數和小數(價格類、兩位小數) 
  24. const priceFilter = function(el) { 
  25.   addListener(el, 'input', debounce(() => {//添加防抖 防止反復觸發事件導致內存溢出 
  26.     el.value = (el.value.match(/^\d*(\.?\d{0,2})/g)[0]) || null 
  27.     if (isNaN(el.value)) { 
  28.       el.value = '' 
  29.     } 
  30.     //觸發input事件 
  31.     el.dispatchEvent(new Event('input')) 
  32.   })) 
  33.  
  34. ··· 

 

 

責任編輯:姜華 來源: 晨曦大前端
相關推薦

2022-04-06 18:29:58

CSSJS輸入框

2024-06-13 15:43:04

2011-07-22 15:32:53

iPhone 按鈕 對話框

2021-09-27 14:44:48

鴻蒙HarmonyOS應用

2023-10-20 08:02:25

圖形編輯器前端

2019-03-07 14:45:07

聊天工具富文本輸入框前端

2024-03-26 07:46:13

El-input正則表達式正則整理

2017-08-14 12:45:54

Windows 10Windows開機密碼

2021-07-13 09:49:08

鴻蒙HarmonyOS應用

2020-12-23 11:45:27

鴻蒙HarmonyOSTextField組件

2023-02-07 08:01:51

失焦邏輯input

2024-05-28 08:23:36

Android開發文本

2021-12-13 16:44:49

鴻蒙HarmonyOS應用

2023-04-27 15:39:54

AI模型

2017-09-11 17:46:48

設計

2025-05-07 08:10:43

2023-05-08 10:29:17

模型論文

2010-09-03 11:30:29

CSSinput

2013-12-12 17:21:46

Lua出入輸出

2024-03-25 09:20:22

CSS語法fixed
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级黄色毛片免费 | 在线播放第一页 | 国产欧美在线 | 亚洲午夜精品一区二区三区 | 精品99久久久久久 | 久草久 | 成人在线视频免费播放 | 亚洲欧美在线观看视频 | 日韩欧美视频 | 黄色在线免费观看 | 99热.com| 二区在线视频 | www日韩欧美 | 精品久久一区 | 看片地址 | 做a视频| 人人玩人人干 | 懂色av蜜桃av| 日韩在线不卡视频 | 精品一级电影 | 日韩h | 91一区二区三区 | 成人在线免费视频 | 国产精品视频免费播放 | 91精品国产91久久久久久密臀 | 欧美久久久电影 | 成人二区| 精区3d动漫一品二品精区 | 亚洲国产精品成人久久久 | 久久亚洲一区二区 | 欧美色图另类 | 免费高潮视频95在线观看网站 | 伊人二区 | 成年人在线播放 | 亚洲精品一区在线观看 | 97视频在线观看网站 | 久久精品亚洲成在人线av网址 | 国产乱码精品一区二区三区忘忧草 | 久久精品无码一区二区三区 | 中文字幕视频在线看 | 亚洲一区二区三区在线 |