这版的输入限制堪称完美 perfect!

20230712 更新 加入 onBlurHandle 如果输入的02 失焦的时候 变成2

<!--数字输入框 只能输入数字 整型 InputNumberIntZen.vue-->
<template>
<Input ref="inputRef"
:clearable="clearable"
:maxlength="maxlength"
:placeholder="placeholder"
v-model="innerValue"
:disabled="disabled"
@on-keydown="onKeyDownHandle"
@on-blur="onBlurHandle" />
</template> <script>
import { keyList1 } from './keyListByInputNumberIntZen' export default {
name: 'InputNumberIntZen',
props: {
placeholder: {
type: String,
default: '请输入'
},
maxlength: {
type: Number,
default: 10
},
clearable: {
type: Boolean,
default: false
},
value: {
type: String,
default: ''
},
disabled: {
type: Boolean,
default: false
}
},
components: {},
data () {
return {
innerValue: this.value.toString(),
keyList1
}
},
watch: {
value: function (val) {
console.info('watch value', val)
this.innerValue = this.value.toString()
},
innerValue: function (val) {
console.info('watch innerValue', val)
if (this.clearSpot(val) !== val) { // 有非法字符的时候 恢复光标 主要针对中文
const diff = this.getDiff(val, this.clearSpot(val))
console.info('diff', diff)
this.$nextTick(() => {
console.info('-- this.value', this.value, '-- this.innerValue', this.innerValue)
this.innerValue = this.value
this.$nextTick(() => {
this.$refs.inputRef.$refs.input.setSelectionRange(diff, diff)
})
})
} else {
if (this.clearSpot(val) === val) {
console.info('emit val', val)
this.$emit('input', val)
this.$emit('validateField') // 这句很重要
// 外层需要 每次 验证一下
// @validateField="$refs.internalTransferRef.validateField('undertakeNumber')"
}
}
}
},
computed: {},
methods: {
getDiff (str1, str2) {
let ret = 0
for (let i = 0; i < str1.length; i++) {
if (str1.substr(i, 1) === str2.substr(i, 1)) {
// next
} else {
ret = i
break
}
}
return ret
},
onKeyDownHandle (e) {
let across = this.keyList1.includes(e.keyCode)
// 这里只能拦截非中文 中文字符 watch拦截
if (!across) { // 只能输入整数
e.preventDefault()
return false
}
},
clearSpot (dateStr) {
return dateStr.replace(/[^0-9]/ig, '')
},
onBlurHandle () {
if (this.innerValue === '') {
return false
}
const n = Number(this.innerValue)
if (String(n) !== this.value) {
console.info('n', n)
this.$emit('input', String(n))
}
},
},
created () { },
activated () { },
mounted () { },
beforeDestroy () { }
}
</script> <style>
</style>
// keyListByInputNumberIntZen.js
export const keyList1 = [
8, // 退格键
9, // tab
96, // 0
97, // 1
98, // 2
99, // 3
100, // 4
101, // 5
102, // 6
103, // 7
104, // 8
105, // 9
// 110, // . 数字类型带点,这里是整型的 所以把点就注释掉了
// 190, // .
46, // del
48, // 0
49, // 1
50, // 2
51, // 3
52, // 4
53, // 5
54, // 6
55, // 7
56, // 8
57, // 9
37, // left
39 // right
]
<InputNumberIntZen v-model.trim="modalData.myInt"
style="width: 100px;"
:maxlength="2"
placeholder="请输入0-99 整数" />

整数输入框 InputNumberIntZen.vue 只能输入整数 不能输入.等其他字符的更多相关文章

  1. JS通过正则限制 input 输入框只能输入整数、小数(金额或者现金)

    第一: 限制只能是整数 <input type = "text" name= "number" id = 'number' onkeyup= " ...

  2. js限制文本框只能输入整数或者带小数点[转]

    这篇文章是关于js限制文本框只能输入整数或者带小数点的内容,以下就是该内容的详细介绍. 做表单验证的时候是否会碰到验证某个输入框内只能填写数字呢,仅允许输入整数数字或者带小数点的数字.下面这段代码也许 ...

  3. JS事件 编程练习-自制计算器 使用JS完成一个简单的计算器功能。实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除。

    编程练习 使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除. 提示:获取元素的值设置和获取方法为:例:赋值:document.getElement ...

  4. html input只允许输入整数

    如果想想让input输入框只输入整数,直接使用以下的input就可以了 <input id="sequence" class="o_input" onke ...

  5. EditText 限制输入整数和小数 的位数

    如题,本文主要说的就是  如何限制 EditText 中 可输入整数和小数 的位数 . 近期,由于公司业务需求中有价格输入功能,给出的要求说是,必须整数能输入几位,小数能输入几位...好嘛,产品一句话 ...

  6. JS-正则表达式 限制输入整数、小数

    //只可以输入整数 onkeyup="value=value.replace(/[^\d]/g,'')" //可以输入数字 包括小数 onkeyup="value=val ...

  7. php实现 查找输入整数二进制中1的个数

    php实现 查找输入整数二进制中1的个数 一.总结 一句话总结: 1.if($j&intval($num)){}的作用是什么? 1 <?php 2 while($num=trim(fge ...

  8. 代码实现程序启动后, 可以从键盘输入接收多个整数, 直到输入quit时结束输入. 把所有输入的整数倒序排列打印

    package com.loaderman.test; import java.util.Comparator; import java.util.Scanner; import java.util. ...

  9. js 输入整数

    1.我用 /^\+?[1-9][0-9]*$/ 貌似不对(小数也可以输入) 2.输入整数  n = /^[1-9]\d*$/; . -]\d*$/; //判断字符串是否为数字 if (!value) ...

  10. python练习:编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0<pwr<6,并且root**pwr等于用户输入的整数。如果不存在这样一对整数,则输入一条消息进行说明。

    python练习:编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0<pwr<6,并且root**pwr等于用户输入的整数.如果不存在这样一对整数,则输入一条消息 ...

随机推荐

  1. 从嘉手札<2024-1-10.2>

    我们每个人都是在受挫中成长起来的 你不能剥夺他人在受苦中获益的权利 大部分人对吃苦的含义可能理解的太肤浅了 穷并不是吃苦 吃苦的本质是长时间为了某个目标而聚焦的能力 在这个过程中放弃娱乐生活.放弃无效 ...

  2. 数据共享Manager(Python)

    from multiprocessing import Process,Manager,Lock def change_dic(dic,lock): with lock: dic['count'] - ...

  3. 天玑9300大战骁龙8 Gen3:十余项数据实测 到底谁才是安卓之王?

    一.前言:全大核天玑9300正面硬钢骁龙8 Gen3 究竟谁才是安卓芯片之王? 今年,两家移动芯片厂商都开始放大招了,骁龙首发Cortex-X4超大核,联发科也不甘示弱,初次将"全大核&qu ...

  4. 2022 多益网络hr面

    不知道为啥 我的一面是hr面试,面试官是一个小姐姐,整个面试过程还是比较轻松的 废话不多说,直接上题目 自我介绍(巴拉巴拉巴拉...) 有参与过什么团队协作项目吗,担任了一个什么样的角色,怎么分配任务 ...

  5. NC17877 整数序列

    题目链接 题目 题目描述 给出一个长度为n的整数序列 \(a_1,a_2,...,a_n\) ,进行 \(m\) 次操作,操作分为两类. 操作1:给出 \(l,r,v\) ,将 \(a_l,a_{l+ ...

  6. NC16591 [NOIP2010]关押罪犯

    题目链接 题目 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气 ...

  7. 立创EDA使用笔记

    立创EDA 在立创EDA上制作的PCB可以直接导入到嘉立创下单, 每个注册用户每个月可以下两个免费订单, 限制PCB尺寸10CMx10CM, 每单五片, 连制作到快递全部免费, 非常适合做样板. 立创 ...

  8. IPFS 添加和管理文件

    IPFS的文件有不同的模式 默认模式 默认模式下, 文件会被解析并存入blocks, 同时文件的结构被存入filestore, 因为IPFS是按内容寻址的文件系统, 在添加时最外层的目录名或文件名信息 ...

  9. 【OpenGL ES】渐变凸镜贴图

    1 前言 ​ 正方形图片贴到圆形上 中将正方形图片上的纹理映射到圆形模型上,凸镜贴图 中介绍了将圆形图片上的纹理映射到凸镜模型上.如果将原图片逐渐变为凸镜效果,中间的变化过程又是什么样的? ​ 图片的 ...

  10. Jsp+Servlet实现文件上传下载(二)--文件列表展示

    接着上一篇讲: Jsp+Servlet实现文件上传下载(一)--文件上传 点击打开链接 本章来实现一下上传文件列表展示,同时优化了一下第一章中的代码. 废话少说,上代码 --------------- ...