h5 android数字键盘,【笔记】移动端H5数字键盘input type=number的处理(IOS和Android)...

在Vue中的项目,基于VUX-UI开发,一个常见的需求:

1、金额输入框

2、弹出数字键盘

3、仅支持输入两位小数,限制最大11位数,不允许0开头

第一,首先想到额就是在VUX-UI中制定type=number。--不可行

VUX中的文档和代码说明,type=number不支持maxLength,会报错,而且没有正则替换的处理或者钩子函数,只有输入后提示校验信息。

第二,基于VUX中XInput封装,有如下问题

1)两层v-model,正则替换的值不会触发input框渲染

解决:currentValue赋值为foramttedValue,放入setTimeout(func ,0)中,让input框先渲染为正则替换前的值,再渲染为替换后的值

jia.gif

jian.gif

currentValue(val, oldVal) {//调用filter过滤数据

let formattedValue = this.filter(val);if (this.type === ‘number‘) {

formattedValue= this.typeNumberFilter(formattedValue, oldVal);

}if (val !== formattedValue || val === ‘‘) {

setTimeout(()=>{this.currentValue =formattedValue;

},0);

}this.$emit(‘input‘, formattedValue);

},

View Code

2)数字键盘input type=number,会导致maxlength失效,无法限制长度

解决:用slice(0, max)处理

jia.gif

jian.gif

if (formattedValue.length > this.max) {

formattedValue= formattedValue.slice(0, this.max);

}

View Code

3)数字键盘input type=number ,连续输入小数点...导致实际值和显示值不一致

解决:用原生的 inputElement.value = oldValue处理

jia.gif

jian.gif

const inputEle = this.$children[0].$refs.input;//TODO: 待大范围验证:处理连续输入..后,type=number的input框会把值修改为‘‘的问题;fastclick导致type=number报错

//问题描述: 1.00. 不会触发值改变,1.00.不会触发值改变,1.00.【\d\.】都会把值修改为空字符串‘‘。hack处理的条件说明如下:

//1、当校验后是空值,(因input=number,formattedValue为‘‘表明 原始newVal也为‘‘)

//2、输入框拿到的是空值(因input=number导致输入框立即被赋予空值。点击清除按钮时,这里input输入框还是上次的值)

//3、上次输入大于两位(避免最后一位无法删除的问题。最后一位删除时,oldVal.length === 1)

if (formattedValue === ‘‘ && inputEle.value === ‘‘ && oldVal && oldVal.match(/^(\d)[\d.]+/)) {

formattedValue=oldVal;

}

setTimeout(()=>{

inputEle.value=formattedValue;

},0);

View Code

4)IOS中数字键盘有%$*等特殊字符

解决:用原生的 inputElement.onkeydown监听事件,非数字和退格和小数点直接return事件

jia.gif

jian.gif

mounted() {if (this.type === ‘number‘) {

const inputEle= this.$refs.xinput.$refs.input;//eslint-disable-next-line

inputEle.onkeydown = (e) =>{

const keyCode=e.keyCode;if (!this.isBackspace(keyCode) && !this.isDot(keyCode) && !this.isNumber(keyCode)) {//其他按键

e.preventDefault();

e.stopPropagation();return false;

}

};

}

}

View Code

第三,其他说明

为什么不用 type=tel?

type=tel在ios中没有小数点

第四,全部代码

jia.gif

jian.gif

:title="title":max="currentMax":min="currentMin":type="type"v-model="currentValue"@on-focus="onFoucus()"@on-blur="onBlur()":show-clear="showClear":placeholder="placeholder"ref="xinput">

data() {return{

currentValue:this.value,

};

},

computed: {

currentMax() {return (this.type === ‘number‘) ? undefined : this.max;

},

currentMin() {return (this.type === ‘number‘) ? undefined : this.min;

}

},

props: {

title: String,

max: Number,

min: Number,

type: String,

showClear: {

type: Boolean,default: true,

},

placeholder: String,

value: [String, Number],

filter: {

type: Function,default: (value) =>{

let formattedValue= ‘‘;

const match= value.match(/^([1-9]\d*(\.[\d]{0,2})?|0(\.[\d]{0,2})?)[\d.]*/);if(match) {

formattedValue= match[1];

}returnformattedValue;

},

}

},

watch: {

currentValue(val, oldVal) {//调用filter过滤数据

let formattedValue = this.filter(val);if (this.type === ‘number‘) {

formattedValue= this.typeNumberFilter(formattedValue, oldVal);

}if (val !== formattedValue || val === ‘‘) {

setTimeout(()=>{this.currentValue =formattedValue;

},0);

}this.$emit(‘input‘, formattedValue);

},

value(value) {this.currentValue =value;

},

},

methods: {

onFoucus() {this.$emit(‘on-focus‘);

},

onBlur() {this.$emit(‘on-blur‘);

},

typeNumberFilter(val, oldVal) {

const inputEle= this.$refs.xinput.$refs.input;

let formattedValue=val;//由于type=number不支持maxLength,用slice模拟

if (formattedValue.length > this.max) {

formattedValue= formattedValue.slice(0, this.max);

}//TODO: 待大范围验证:处理连续输入..后,type=number的input框会把值修改为‘‘的问题;fastclick导致type=number报错

//问题描述: 1.00. 不会触发值改变,1.00.不会触发值改变,1.00.【\d\.】都会把值修改为空字符串‘‘。hack处理的条件说明如下:

//1、当校验后是空值,(因input=number,formattedValue为‘‘表明 原始newVal也为‘‘)

//2、输入框拿到的是空值(因input=number导致输入框立即被赋予空值。点击清除按钮时,这里input输入框还是上次的值)

//3、上次输入大于两位(避免最后一位无法删除的问题。最后一位删除时,oldVal.length === 1)

if (formattedValue === ‘‘ && inputEle.value === ‘‘ && oldVal && oldVal.match(/^(\d)[\d.]+/)) {

formattedValue=oldVal;

}

setTimeout(()=>{

inputEle.value=formattedValue;

},0);returnformattedValue;

},

isBackspace(keyCode) {return keyCode === 8;

},

isDot(keyCode) {return keyCode === 46 || keyCode === 110 || keyCode === 190;

},

isNumber(keyCode) {return (keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105);

},

},

mounted() {if (this.type === ‘number‘) {

const inputEle= this.$refs.xinput.$refs.input;//eslint-disable-next-line

inputEle.onkeydown = (e) =>{

const keyCode=e.keyCode;if (!this.isBackspace(keyCode) && !this.isDot(keyCode) && !this.isNumber(keyCode)) {//其他按键

e.preventDefault();

e.stopPropagation();return false;

}

};

}

}

};

View Code

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sybase数据库应用系统调优的五大领域

Sybase数据库应用系统调优的五大领域 2011/3/14/13:49来源&#xff1a;慧聪it网本 文以“某大型商业银行的网上银行系统”这一很具有典型意义的企业级大型Sybase数据库应用系统为例&#xff0c;涉及了数据库应用系统调优的五大领域&#xff1a;压力测试、 应用端调优、服务器端…

JQGrid 参数、属性API

JQGrid是一个在jquery基础上做的一个表格控件&#xff0c;以ajax的方式和服务器端通信。 JQGrid Demo 是一个在线的演示项目。在这里&#xff0c;可以知道jqgrid可以做什么事情。下面是转自其他人blog的一个学习资料&#xff0c;与其说是学习资料&#xff0c;说成查询帮助文档更…

android 6.0 ios9谁快,没安卓6.0流畅?iOS 9突飞猛进终于不卡

今天早些时候&#xff0c;iOS 9.1正式发布&#xff0c;改进系统Bug&#xff0c;添加新功能等&#xff0c;但还有不少反应系统流畅了。不知道是否是心里作用的关系&#xff0c;之前不少果粉吐槽iOS 9过于卡顿&#xff0c;苹果也是在一个版本一个版本的改进&#xff0c;这次的iOS…

(UML两个汇总)九种图。

最后总结UML关系&#xff0c;有明确的关系&#xff0c;现在让我们总结一下UML九图。。图往往比文字要直观&#xff0c;因此&#xff0c;当我们开发软件。文件必须是不可或缺的人物&#xff0c;。以下我将这九种图分了一下&#xff1a; 我们还能够将这九种图分为静态图和动态图&…

AutoMapper搬运工之自定义类型转换

前言 最近还挺忙&#xff0c;还有点累&#xff0c;一直都没更新了&#xff0c;实在是懒呀。正题之前先说点别的&#xff0c;最近公司要扩张了&#xff0c;需要大量开发&#xff0c;领导说推荐有钱可以拿&#xff0c;如此好机会&#xff0c;我就趁机做个广告。ShippingRen.com招…

XML基础

XML的英文全称是Extensible Markup Language&#xff0c;中文翻译为可扩展标记语言。它是网络应用开发的一项新技术。 与HTML一样&#xff0c;XML也是一种标记语言&#xff0c;但是XML的数据描述能力比HTML强&#xff0c;XML具有描述所有已知和未知数据的能力。XML扩展性比较好…

html使标签为正方形,W3C CSS测试答案

您的回答&#xff1a;1.CSS 指的是&#xff1f;您的回答&#xff1a;Cascading Style Sheets2.在以下的 HTML 中&#xff0c;哪个是正确引用外部样式表的方法&#xff1f;您的回答&#xff1a;3.在 HTML 文档中&#xff0c;引用外部样式表的正确位置是&#xff1f;您的回答&…

SqlBulkCopy 批量复制数据到数据表

使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是&#xff0c;数据源不限于 SQL Server&#xff1b;可以使用任何数据源&#xff0c;只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据 使用Datatable作为数据源的方式&#xff1a;下面的代码使用到了Co…

OC-封装、继承、多态

面向对象的三大特征&#xff1a;封装、继承、多态 1.封装 什么是封装&#xff1a;在程序上&#xff0c;隐藏对象的属性和实现细节&#xff0c;仅对外公开接口&#xff0c;控制在程序中属性的读和修改的访问级别&#xff1b;将对象得到的数据和行为&#xff08;或功能&#xff0…

Android Ac 控件,Android控件--MultiAutoCompleteTextView

1.功能可支持选择多个值(在多次输入的情况下)&#xff0c;分别用分隔符分开&#xff0c;并且在每个选中的时候再次输入值时会自动匹配&#xff0c;可用在发短信、发邮件时选择联系人这种类型当中。2.独特属性android:completionThreshold"3" ----设置输入多少字符时自…

BZOJ1299 [LLH邀请赛]巧克力棒

怎么又是博弈论。。。我去 Orz hzwer&#xff0c;这道题其实是可以转化成Nim游戏的&#xff01; "第一步&#xff1a; 先从n根巧克力棒中取出m(m>0)根&#xff0c;使得这m根巧克力棒的xor和为0&#xff0c;同时使得剩下的n-m根巧克力棒无论怎么取&#xff0c;xor和都不…

android 安装应用程序apk安装不了

今天用测试机的时候遇到这个问题 解决办法&#xff1a; 在设置里面找到应用程序管理安全设置&#xff0c;&#xff0c;【允许未知来源程序安装】 -------------大致以上思路&#xff0c;具体按钮名称我就不重新去找了------------------

华为鸿蒙消费者,王成录谈鸿蒙挑战和华为消费者业务崛起

据 IDC 数据&#xff0c;全球智能手机出货量已连续 4 年下滑&#xff0c;在移动互联网之后&#xff0c;IoT 被认为是下一个更大量级的机会。在此背景下&#xff0c;鸿蒙是华为力图在 IoT 时代继续领先的关键项目&#xff0c;而面对贸易封锁&#xff0c;鸿蒙也成了华为冲出重围的…

读小米的《参与感》书的摘录(一),与大家分享!

1、互联网思维就是口碑为王 其实在过去选择产品&#xff0c;我们也一直会通过朋友或专家的口碑推荐来做决策&#xff0c;但不是主流。而今天口碑为王的背后&#xff0c;我理解我们面临的信息传播发生了一下三个重要的转变&#xff1a;1、信息从不对称转变为对称&#xff1b;2、…

Fragment的保存

2019独角兽企业重金招聘Python工程师标准>>> 一、场景 在一个fragment播放语音文件&#xff0c;一旦设备发生旋转&#xff0c;播放将暂停。因为fragment将重新生成。具体的流程步骤如下&#xff1a; 二、解决的方式 在Fragment的onCreate方法中&#xff0c;设置s…

html+监听+页面滚动到底部,解决HTML5中滚动到底部的事件问题

问题&#xff1a;在H5中&#xff0c;我们有这样的需求&#xff1a;例如有列表的时候&#xff0c;滚动到底部时&#xff0c;需要加载更多。解决方案&#xff1a;可以采用window的滚动事件进行处理分析&#xff1a;如果滚动是针对整个屏幕而言的(不针对于某个界面小块)&#xff0…

SQL Server 存储引擎-剖析Forwarded Records

我们都知道数据在存储引擎中是以页的形式组织的,但数据页在不同的组织形式中其中对应的数据行存储是不尽相同的,这里通过实例为大家介绍下堆表的中特有的一种情形Forwared Records及处理方式. 概念 堆表中,当对其中的记录进行更新时,如果当前数据页无法满足更新行的容量,此时这…

买面包和IoC

今天上午准备去一个阿姨&#xff0c;在那里买面包。这可能是由于小尺寸她的&#xff0c;因此&#xff0c;管理不规范&#xff0c;所以&#xff0c;当你买面包。没有人行。即使所有的大学生&#xff0c;似几乎没有这种意识。。。 但让我感到震惊的是。尽管没有排队&#xff0c;但…

u3d游戏开发视频潭州_游戏美术行业的发展与应用人工智能学院专业介绍及未来前景系列报告会二...

为了让2020级新同学对动漫专业加深认识&#xff0c;更好的规划学习&#xff0c;学院于11月12日6点晚邀请了校企合作单位“369云遮月游戏公司”在长安校区图书馆阶梯教室进行了游戏美术行业的发展与应用的报告会&#xff0c;主题围绕“专业介绍与发展前景”展开&#xff0c;云遮…

html文件怎么生产vm页面,如何使用spring mvc将Html文件转换为.vm(velocity模板)文件...

首先&#xff0c;您需要清楚的是&#xff0c;当您使用MVC时&#xff0c;您可以以任何您想要的方式提供页面。这是您的问题的一个可能的解决方案&#xff0c;这是我自己的应用程序的实际代码。您可能想要像这样提供* .html请求。的web.xmlappServletorg.springframework.web.ser…