Javascript高级编程学习笔记(77)—— 表单(5)过滤输入
在日常实践中,我们常常会需要用户按照某种规则输入数据
但是文本框在默认情况下缺少验证数据的手段,因此需要使用JS来完成此类过滤输入的操作
通过事件和DOM的结合手段就能够将普通的文本框转换为功能型控件
屏蔽字符
有时候我们需要用户的输入不包含某些字符
所以我们可以通过阻止 Keypress 事件的默认事件来完成屏蔽字符的功能
以如下代码为例,可以实现一个只能输入数字的文本框
var textbox = document.getElementById("myInput");
text.addEventListener("keypress",function(event){
if(!/\d/.test(String.fromCharCode(event.charCode))){
event.preventDefault();// 如果不是数字则阻止默认事件,即阻止输入
}
},false)
但是上面的代码存在一个问题,那就是常用的功能型按键也被屏蔽了,比如退格之类的(总不能让用户只能输入不能删除吧)
所以一般来说我们还需要注意这些功能型按键的检测
在 Firefox 中对应的键码为0 ,在safari中则为8
所以我们只需要放过键码小于10的键就行,如果不放心的话可以在提交表单之前通过正则对其再次进行校验
所以重写后的代码如下
var textbox = document.getElementById("myInput");
text.addEventListener("keypress",function(event){
var charCode = event.charCode;
if(!/\d/.test(String.fromCharCode(charCode))&&charCode>9){
event.preventDefault();// 如果不是数字则阻止默认事件,即阻止输入
}
},false)
但是这样的代码仍存在一个小问题,那就是粘贴复制也在屏蔽的范围之内
所以我们还需要保证用户没有按下 ctrl 键
var textbox = document.getElementById("myInput");
text.addEventListener("keypress",function(event){
var charCode = event.charCode;
if(!/\d/.test(String.fromCharCode(charCode))&&charCode>9&&!event.ctrlKey){
event.preventDefault();// 如果不是数字则阻止默认事件,即阻止输入
}
},false)
操作剪切板
HTML5将剪切板的相关事件纳入了标准,即以下6个剪切板事件:
- beforecopy:在发生复制操作前触发
- copy:在复制发生时触发
- beforecut:在剪切操作前触发
- cut:发生剪切操作时触发
- beforepaste:在发生粘贴操作前触发
- paste:发生粘贴操作时触发
由于没有针对剪切板事件的标准,所以上面事件的事件对象会因浏览器而异
如果要阻止粘贴复制,则只有取消 paste、copy、cut 事件的默认事件才能生效
要访问剪切板中的数据,可以使用 clipboardData 对象
该对象是 window 对象的属性
但是在主流浏览器中只有剪切板事件发生时才可以对该对象进行访问,这是为了避免对剪切板数据的未授权访问
该对象有以下三个方法:
- getData():用于从剪切板中取得数据,接收一个参数表示要获取数据的类型:"text"、"URL"
- setData():该方法用于设置剪切板中的内容,接收两个参数,第一个参数和 getData 一样,第二个参数则是需要放在剪切板中的文本
- clearData():清空剪切板
要实现一个只接收数字的输入框当然还需要对剪切板事件进行处理,不然仍可以通过粘贴的方式在文本框中输入数字
实现如下:
textbox,addEventListener("paste",function(event){
var clipboard = widnow.clipboardData || event.clipboardData;
var text = clipboard.getData("text");
if(!/^\d*$/.test(text)){
event.preventDefault();
}
},false)
Javascript高级编程学习笔记(77)—— 表单(5)过滤输入的更多相关文章
- Javascript高级编程学习笔记(75)—— 表单(3)表单字段
表单字段 表单作为web应用中不可或缺的一部分,当然也是可以使用原生的 DOM 元素来访问的 除了标准的访问方式之外,每个表单都拥有一个 elements 属性,该属性保存着该表单所有 表单元素 的集 ...
- Javascript高级编程学习笔记(80)—— 表单(8)表单序列化
表单序列化 随着 Ajax 的出现,表单序列化成为一种常见需求 以将表单信息序列化为查询字符串为例 我们可以利用表单的 type 属性,以及 name 和 value 实现对表单的序列化 序列化应满足 ...
- Javascript高级编程学习笔记(78)—— 表单(6)HTML约束验证API
自动切换焦点 使用JS可以极大地提升表单的易用性 其中最常用的一种就是当用户填写完当前字段后焦点自动切换到下一个字段 以下方的HTML代码为例: <input type="text&q ...
- Javascript高级编程学习笔记(74)—— 表单(2)表单提交及重置
表单提交 表单的很大一部分作用就是帮助用户完成和服务器的交互 所以表单提交是表单中比较重要的部分 虽然现如今的大部分应用场景都使用 AJAX 的异步请求来代替表单,但是仍有部分操作需要使用表单来完成, ...
- Javascript高级编程学习笔记(73)—— 表单(1)表单基础
表单 JS最初的一个用途就是帮助服务器分担处理表单的责任 时至今日,虽然web应用以及JS都有了长足的发展,但是表单依然是现在web应用中比较重要的部分. 因为默认的表单控件很丑,所以有时候我们会使用 ...
- 《JavaScript高级程序设计》笔记:表单脚本(十四)
表单的基础知识 在HTML中,表单是由<form>元素来表示的,而在JS中,表单对应的是HTMLFormElement类型.HTMLFormElement继承了HTMLElement,因而 ...
- Javascript高级编程学习笔记(83)—— 富文本选区(3)
富文本选区 在富文本编辑器中使用 iframe 的 getSelection() 方法可以获取选中的文本 该方法是 window 对象和 document 对象的属性,调用后会返回一个当前选选择文本的 ...
- Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件
键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...
- Javascript高级编程学习笔记(58)—— 事件(2)事件处理程序
事件处理程序 事件处理程序即响应某个事件的函数 事件处理程序以 “on” 开头 如“onclick”,“onload” HTML事件处理程序 某个元素支持的每种事件都可以使用一个与响应的事件处理程序同 ...
随机推荐
- 010 Editor 8.0.1 之 暴力破解
一.工具及软件介绍二.破解1.打开调试程序2.打开注册页面3.在弹出窗口API中下断4.点击注册按钮5.逐一进去观察6.找到正确的授权字符串7.找到函数头8.找到计算出EBX的CALL9.进入函数跟踪 ...
- 201621123002《Java程序设计》第八周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 从源代码中可以看出 ...
- GUI学习之五——QAbstractButton类学习笔记
今天总结一下AbstractButton类的学习笔记. 一.描述 AbstractButton是对各种按键的抽象类他的继承关系是这样的 首先,QAbstractButton继承了QWidget类的各种 ...
- Atcoder Beginner Contest 070 D - Transit Tree Path
题意:n个点,n-1条边,组成一个无向的联通图,然后给出q和k,q次询问,每次给出两个点,问这两个点之间的最短距离但必须经过k点. 思路:我当时是用优化的Dijkstra写的(当天刚学的),求出k点到 ...
- 移动端 去除onclick点击事件出现的背景色框
这个特效是实现在移动端点击某个地方的时候,比如说按钮或者超链接的时候,系统会默认加上一些灰色的背景和一些高亮的效果.但是有的时候我们并不想要这些效果.并且希望点击的时候实现神不知鬼不觉的感觉,,这个时 ...
- CUDA C
一.CUDA结构 硬件:GPU(Graphics Processing Unit) SM(Streaming Multiprocessor) SP(Streaming Processor) ...
- Python 打印矩形、直角三角形、等腰三角形、菱形
# 1)打印一个星号 print('*') #2)打印一行6个星号 * * * * * * for i in range(6): print('*',end=' ') #3)打印6列星号 * * * ...
- Shiro与Spring整合
Shiro引入Spring 添加jar包/maven配置 <!-- shiro支持 --> <dependency> <groupId>org.apache.shi ...
- LOJ-10096(强连通+bfs)
题目链接:传送门 思路: 强连通缩点,重建图,然后广搜找最长路径. #include<iostream> #include<cstdio> #include<cstrin ...
- sf-1 算法
算法基础 算法 算法(Algorithm):一个计算过程,解决问题的方法 DNiklaus Wirth:“程序=数据结构+算法” 时间复杂度 时间复杂度:用来评估算法运行效率的一个式子 时间复杂度-小 ...