表单验证

表单验证是JavaScript最常用、最有用的功能之一。在表单内容提交之前进行验证,可以降低服务器处理器的压力,缩短用户等待的时间。表单校验中第一个要考虑的问题是:什么时候捕获表单的录入错误?在错误发生之前、在错误发生时、在错误发生之后;

♞ 使用submit事件在错误发生之后捕获错误

表单数据输入完毕后,通过点击提交按钮和submit()方法把数据发送到由表单的action属性指定的表单处理程序进行处理。为了防止无效数据进入服务器端,我们有在submit事件发送之后,表单数据提交到表单处理程序之前,验证表单中输入的数据的有效性,即把校验代码写在submit()事件的事件处理程序中。如果一个控件包含了无效数据,就显示一条信息,并且通过处理程序返回false值来取消提交,如果数据有效,处理程序返回true值,正常提交表单数据。

♞ 使用change事件在错误发生时捕获错误

可以在用户输完每项数据后,马上进行校验;当修改一个控件,并失去焦点时,会触发change事件,我们就可以在change事件处理程序中,写入校验码,如果数据无效,显示一条信息提醒用户,并且通过处理程序返回false值来阻止表单的提交。

♞ 使用keypress事件在错误发生之前捕获错误

如何在开始就阻止错误的发生?可以通过在键入数据的时候,即keypress事件发生时,限制数据的类型来实现,这样就可以在错误发生时捕获并阻止。

✍ 表单校验最佳实践

➣ 必须对用户有帮助——客户端校验必须用于帮助用户正确输入数据,因此,它必须以有帮助的方式与用户交互。例如用户输入一个无效数据,可以在错误信息中包含正确的数据格式。同样可以使用脚本来纠正一般的错误,例如:使用JavaScript自动格式化;

➣ 不要让人讨厌——我们使用alert()来提示用户输入无效是为了演示,但是在用户可以校验数据之前,alert()窗口必须关闭,因为用户也许会忘记到底是哪个控件出错。所以最好考虑在页面本身的某个地方显示错误信息;

➣ 只要有可能,就用HTML功能代替JavaScript——比如说使用控件的maxlength属性校验控件长度,比使用JavaScript校验好;提供一个可能的日期的下拉列表以避免无效输入,来替代日期检查等等;

➣ 早点捕获错误——一直等到提交不是捕获错误的最佳事件,可以选择在错误发生时或者发生之前对错误进行捕获。如果要使用blur和focus触发器,必须管理事件,包括消除事件冒泡;

➣ 如果拿不准,就不要太严格——JavaScript表单校验是用于帮助用户发现错误的,而不是一种强制政策;

JavaScript总结(八)的更多相关文章

  1. JavaScript常用八种继承方案

    更新:在常用七种继承方案的基础之上增加了ES6的类继承,所以现在变成八种啦,欢迎加高级前端进阶群一起学习(文末). --- 2018.10.30 1.原型链继承 构造函数.原型和实例之间的关系:每个构 ...

  2. JavaScript(八)——复习一(重要内容基本包含在内)

    一.常用对话框 1.alert(""):警告对话框,作用是弹出一个警告对话框 2.confirm(""):确定对话框,弹出一个带确定和取消按钮的对话框——确定返 ...

  3. javascript继承(八)-封装

    这个系列主要探讨的是javascript面向对象的编程,前面已经着重介绍了一下js的继承,下面想简单的说一下js如何实现封装的特性. 我们知道面向对象的语言实现封装是把成员变量和方法用一个类包围起来, ...

  4. javascript (八) 语法格式

    JavaScript 对大小写敏感. JavaScript 对大小写是敏感的. 当编写 JavaScript 语句时,请留意是否关闭大小写切换键. 函数 getElementById 与 getEle ...

  5. JavaScript进阶(八)JS实现图片预览并导入服务器功能

    JS实现导入文件功能       赠人玫瑰,手留余香.若您感觉此篇博文对您有用,请花费2秒时间点个赞,您的鼓励是我不断前进的动力,共勉!(PS:此篇博文是自己在午饭时间所写,为此没吃午饭,这就是程序猿 ...

  6. 学习 JavaScript (八) 引用类型之 Object

    在JavaScript中,引用类型是一种数据结构.包括对象(Obejct).数组(Array).日期(Date).正则表达式(RegExp).函数(Function).基本包装类型(new Boole ...

  7. JavaScript(八)

    闭包 什么是闭包 函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制收回 function aaa(a){ var b = 5; function bbb(){ a++; ...

  8. 前端笔记之JavaScript(八)关于元素&计算后的样式

    一.获取元素方法(JS选择器) 1.1概述 得到id元素的方法 document.getElementById() 得到一个元素.事实上,还有一个方法可以得到标签元素,并且得到的是多个元素: docu ...

  9. 深入浅出javascript(八)this、call和apply

    _________此篇日志属于重要记录,长期更新__________ this,call,apply这三个是进阶JS的重要一步,需要详细的记录. ➢ this 一.作为对象的方法调用. 当函数作为对象 ...

  10. 你不知道的JavaScript(八)逻辑运算

    JS的逻辑运算结果和其他一些强类型语言差别比较大,也比较容易让人产生困惑,看下面的例子: <script type="text/javascript"> var a = ...

随机推荐

  1. Jquery的跨域调用

    JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念.当然,究其本质还是通过script标签动态加载js,似乎这是实现真正跨域的唯一方法. getJSON ...

  2. inclusion_tag 界面的嵌套 和渲染

    后端的html渲染到前端: 如果后端直接定义的是html标签,传到前端的时候因为浏览器的安全机制就会直接渲染成字符串如果想要渲染成需要的标签,就需要在后端用make_save()进行包裹,或者直接在前 ...

  3. Linux装python3

     记住下载的软件最好装在/opt下默认的 大家都这样做 linux装python3.7我们以安装最新的来做测试 先下载关联的包防止出错 安装python前的库环境,非常重要yum install gc ...

  4. 用HashSet存储自定义对象

      案例 package cn.itcast_02; import java.util.HashSet; /* * 需求:存储自定义对象,并保证元素的唯一性 * 要求:如果两个对象的成员变量值都相同, ...

  5. 数据挖掘比赛优秀经验贴-收集ing

    (1)TOP5%Kaggler:如何在 Kaggle 首战中进入前 10% | 干货https://www.leiphone.com/news/201703/kCMQyffeP0qUgD9a.html ...

  6. 使用github客户端上传文件(瓜皮教程)

    因为栋哥的课才接触道github这个东西,离第一次接触大概有一年左右了吧,记得不是太清楚了,但是,直到前几天前我还是不知道如何配置,利用git上传文件,之前也是叫同学帮忙弄得,但是这次软工实践要频繁用 ...

  7. [李居丽][다이아몬드][Diamond]

    歌词来源:http://music.163.com/#/song?id=484056974 作曲 : Damon Sharpe/JOHN HO/JEFF SHUM [作曲 : Damon Sharpe ...

  8. 【原创】MySQL 生产环境备份还原

    公司需要对生产环境的数据库进行备份,我接下了这份任务. 1. 首先谷歌了以下大家的备份方法 许多都使用到了Xtrabackup这个工具,超大型的公司可能有其他的的备份方法,这个工具对于中小型公司,甚至 ...

  9. 【译文】MySQL InnoDB 使用的锁分析

    InnoDB 使用的 锁类型 共享锁和排它锁 意向锁 记录锁 间隙锁 Next-key 锁 插入意向锁 AUTO-INC 锁 共享锁和排他锁 InnoDB实现了俩个标准的行级锁,共享锁和排它锁. 共享 ...

  10. 多线程操作C++ STL vector出现概率coredump问题及尽量避免锁的双缓冲队列

    多线程操作全局变量,必须考虑同步问题,否则可能出现数据不一致, 甚至触发coredump. 前段时间, 遇到一个多线程操作了全局的vector的问题,  程序崩了.场景是这样的:某全局配置参数保存在一 ...