我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何使HTML5数字输入仅接受整数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何使HTML5数字输入仅接受整数

这篇文章给大家分享的是有关如何使HTML5数字输入仅接受整数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

整体概念是合理的:使用HTML 5属性来限制可以发送到服务器的内容,然后使用Javascript增强它,以限制用户可以在第一个地方输入的内容。

所以让我们来看看这些问题,并更好地实现它。

问题1,不好的脚本

最常见的缺陷是缺乏适当的降级功能。  如果您要在“electron”或“nw.js”中构建完整的堆栈应用程序,那很好,但是这种形式的东西通常在面向公众的网站中没有位置。

就像我经常说的那样,高质量的脚本应该增强已经在工作的页面,而不是用户使用它的唯一方法。

解决办法?

使用 pattern 和 step 属性来限制有效内容。

问题2,正则表达式模式错误或不完整

人们最常用的模式是 [-/ d] *,它的问题是允许在任何地方都减号。 虽然肯定可以使用 type = “number” 来解决问题,但这不是一个好选择。  截取按键时更是如此,因为减号只能是第一个字符。

它还可能出现问题,因为某些实现“不是”正则表达式,这会导致误报。

解决办法?

对于HTML,使用更好的表达式:^[- d]\d*$ 更加健壮和准确。减号可以是匹配开始的第一个字符,然后是零个或多个小数,直到字符串结束。

对于JavaScript,只使用正则表达式来测试数字,并应用一些更实用的逻辑来检测其他值。

简单易行!

问题3,在标记中使用事件属性

我知道在JSX垃圾中,有大量的用嘴呼吸的人在鼓励这一点,但如果你在写vanilla或其他系统,请出于对圣诞节的爱,从1997年的直肠中取出你的头颅。

将 “onkeypress” 或 “onchange” 放在标记中意味着错失了一次缓存机会,也违反了分离关注的原则。以这种方式将 JavaScript  放进标记中,就像在 HTML 4 Strict 中被废弃的所有东西一样,愚蠢得令人发指。就像如果你要用 “text-white box-shadow  col-4-s” 这样的属性在你的HTML上撒尿一样,请你承认失败,然后回到写HTML 3.2的时候,用所有那些FONT /  CENTER标签、COLOR、BGCOLOR、SIZE、BORDER和ALIGN属性,以及 "用于布局的表格  "来写,你们似乎都很清楚地、很珍视地错过了。

这也意味着您没有完整/适当的事件处理程序访问权限。

解决办法?

Element.addEventListener,请使用它!

问题4,必须对每个输入进行硬编码

无论是通过问题3将事件属性放到标记中,还是通过手动获取唯一ID来捕获它们,我几乎没有发现可以实际使用即插即用的标记应用程序的代码库!

解决办法?

document.querySelectorAll('input[type="number”][step="1"]')  给我们提供所有我们想要的整数输入,所以我们可以增强它。

问题5,一些脚本阻止使用导航控制和正常编辑!

通过拦截并只允许减号和0...9,它们可以防止退格键、回车键、制表键、箭头、删除、插入等等等等。并不是所有的浏览器都会把这些作为 event.key  发送,这要看你钩住的是什么事件。比如 “keypress” 事件在Firefox和Chrome中会过滤掉一些,以免破坏正常的表单使用,但 “老Edge”  和Safari不会,“keydown” 则什么也不过滤。

解决办法?

因为 “keypress” 事件跨浏览器不一致,所以用keydown代替。那么我们就可以利用所有控制键在 Event.key  值中返回多个字符的事实,我们只需要检查 Event.key.length>1 就可以说 “继续允许这些”。

正如前面所提到的,我们所需要的只是一个简单的输入,在不使用JavaScript的情况下,它首先具有尽可能多的功能!

HTML:

<input type="number" step="1" pattern="^[-/d]/d*$">

只接受整数,如果你想只接受正数,可以换成 pattern="/d+”

JavaScript:

然后我们可以使用JavaScript来限制用户的输入,这样人们甚至不允许输入无效值。

(function() {   var     integers = document.querySelectorAll('input[type="number"][step="1"]'),     intRx = /\d/;      for (var input of integers) {     input.addEventListener('keydown', integerChange, false);   }     function integerChange(event) {     if (       (event.key.length > 1) ||        (         (event.key === "-") &&         (event.currentTarget.value.length === 0)       ) ||       intRx.test(event.key)     ) return;     event.preventDefault();   }   })();

我们首先将其包装在IIFE中以隔离范围。 然后,抓取我们要在页面上挂接的所有输入,并创建我们的正则表达式。

我在事件开始处而不是在事件内部创建正则表达式,这样我们就不用浪费时间在每个该死的按键上创建它。这就是匿名函数可能带来开销的地方,也是需要告诉那些“函数式程序员”和他们的“副作用”废话的地方。

循环遍历所有输入,并为它们分配事件处理程序。

上述处理程序只是检查我们的返回情况。像箭头、退格键、回车键等控制键都会返回完整的文字来描述它们,所以如果event.key的长度>1,我们就不要阻止这些。

如果它是一个负号和第一个字符,通过return允许它。

如果它是一个数字,通过return允许它。

如果都不是,请阻止该事件。

Live Demo

这是一个代码本,它包括几个文本字段和多个整数和非整数的数字字段,所以你可以看到它确实只钩住了我们想要的字段。

https://codepen.io/jason-knight/pen/QWGyrwq

如何使HTML5数字输入仅接受整数

悬而未决的问题

我可能会考虑添加的一件事是挂钩“change”事件来拦截粘贴,但由于“pattern”属性不允许提交无效的值,所以应该没有问题。

感谢各位的阅读!关于“如何使HTML5数字输入仅接受整数”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何使HTML5数字输入仅接受整数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么让HTML5数字输入仅接收整数

这篇文章主要介绍了怎么让HTML5数字输入仅接收整数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。问题 1,不好的脚本最常见的缺陷是缺乏适当的降级功能。如果您要在“elect
2023-06-15

c++中如何输入数字

在 c++ 中,输入数字需使用 >> 操作符:声明对应类型的变量。使用 cin 流对象打开输入流。在输入流后面使用 >> 输入数字并存储到声明的变量中。C++ 中如何输入数字在 C++ 中,输入数字需要使用流式输入操作符 >>。以下步骤说
c++中如何输入数字
2024-05-10

python如何实现输入2个整形数字并输出最大值

这篇文章将为大家详细讲解有关python如何实现输入2个整形数字并输出最大值,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。import math"""需求:输入2个整形数字,输出最大值。python代码如
2023-06-02

java如何输入字符数组

在Java中,可以使用Scanner类来输入字符数组。以下是一个示例代码:```javaimport java.util.Scanner;public class Main {public static void main(String[]
2023-08-30

php如何实现输入数字

在PHP中,可以使用$_POST或者$_GET来获取用户输入的数字。示例代码如下:使用$_POST方法获取用户输入的数字:php如何实现输入数字
2024-03-13

c++中如何输入字符数组

如何在 c++++ 中输入字符数组在 C++ 中输入字符数组有多种方法:cin.getline()语法: cin.getline(array_name, size, delimiter);参数:array_name:字符数组的名称si
c++中如何输入字符数组
2024-05-09

javascript如何查询输入字符个数

这篇文章主要讲解了“javascript如何查询输入字符个数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript如何查询输入字符个数”吧!一、基础知识在介绍JavaScript
2023-07-06

python如何限制输入数字的范围

在Python中,可以使用条件语句来限制输入数字的范围。以下是一个示例代码:```pythonwhile True:try:num = int(input("请输入一个数字:"))if num 100:raise ValueError("
2023-08-23

python如何使用输入函数input

这篇文章主要为大家展示了“python如何使用输入函数input”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何使用输入函数input”这篇文章吧。1、Python提供了input
2023-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录