Javascript_06_表单验证(离开单项,输入框后提示信息)
Javascript_06_ 表单验证(离开单项,输入框后提示信息)
说明:对于必须输入的入力框,光标离开(使用 onblur方法)时进行检查。假如有错,红色的提示信息直接在该画面的这个输入框的后面显示出来,并把光标重新定向到这个输入框。
待解决问题:
① 内存泄漏问题:比如用户名没输入,离开用户名输入框时,画面上会给出提示警告信息;此时再点击密码输入框时,会导致 IE占用很大的内存,好像是内存泄漏了。
② 对于选择框的检查问题(上述方法是在从输入框离开时进行检查),对于选择框,我直接没有点击选择,又怎么检查呢?此问题扩展开来,假如用户直接没有将光标放入过必须输入项,那这一项的检查也就无从谈起了。极端些,假如用户什么也没有输入,就直接点击提交,这种检查机制就不会起作用。前面那个弹警告框的验证方式,虽然用户体验不太好,但是肯定能起作用。
这边只是先将这种用户体验比较好的检查机制的原理用代码表现一下,以下的这两个文件还需要改善。但这种用户体验比较好的检查机制是以后的发展方向,也是我们要努力的方向。
1. regcheckdata2.js
- function checkdata() {
- var ssn=form.username.value.toLowerCase();
- if (!checkUserName(ssn)) return false; //用户名检查
- var pwd1 = form.pwd.value;
- if (!checkPassword1(pwd1)) return false; //密码1检查
- var pwd2 = form.pwd2.value;
- if (!checkPassword1(pwd2)) return false; //确认密码检查
- //检查性别
- if( !(form.sex[0].checked || form.sex[1].checked) ) {
- alert("请选择性别!");
- form.sex[0].focus();
- return false;
- }
- //检查省份
- if( form.province.selectedIndex == 0 ) {
- alert("请选择省份!");
- form.province.focus();
- return false;
- }
- if(form.intro.value == "") {
- alert("/自我介绍不能为空!");
- form.intro.focus();
- return false;
- }
- return true;
- }
- // 用户名检查
- function checkUserName(ssn){
- if( ssn.length<3 || ssn.length>18 ) {
- document.getElementById("usernameErr").innerHTML = "<font color='red'>
- 请输入正确的用户名,用户名长度为3-18位!</font>";
- form.username.focus()
- return false;
- }
- if (isWhiteWpace(ssn)){
- document.getElementById("usernameErr").innerHTML = "<font color='red'>请输入正确的用户名,用户名中不能包含空格!</font>";
- form.username.focus()
- return false;
- }
- if (!isSsnString(ssn)){
- document.getElementById("usernameErr").innerHTML = "<font color='red'>对不起,您选择的用户名不正确或已被占用!用户名/n由a~z的英文字母(不区分大小写)、0~9的数字、点、减/n号或下划线组成,长度为3~18个字符,只能以数字或字母/n开头和结尾,例如:kyzy_001。</font>";
- form.username.focus()
- return false;
- }
- //输入正确的用户名后,将上次的错误提示信息清掉
- document.getElementById("usernameErr").innerHTML = "";
- return true;
- }
- //密码检查
- function checkPassword1(pwd1) {
- if( strlen(pwd1)<6 || strlen(pwd1)>16 ) {
- //alert("/正确地登录密码长度为6-16位,仅可用英文、数字、特殊字符!")
- document.getElementById("pwdErr").innerHTML = "<font color='red'>正确地登录密码长度为6-16位,仅可用英文、数字、特殊字符!</font>";
- form.pwd.focus()
- return false;
- }
- if( strlen2(pwd1) ) {
- //alert("/您的密码中包含了非法字符,仅可用英文、数字、特殊字符!")
- document.getElementById("pwdErr").innerHTML = "<font color='red'>您的密码中包含了非法字符,仅可用英文、数字、特殊字符!</font>";
- form.pwd.focus()
- return false;
- }
- if( pwd1 == form.username.value ) {
- //alert("/用户名和密码不能相同!")
- document.getElementById("pwdErr").innerHTML = "<font color='red'>密码和用户名不能相同!</font>";
- form.pwd.focus()
- return false;
- }
- document.getElementById("pwdErr").innerHTML = "";
- return true;
- }
- //确认密码检查
- function checkPassword2(pwd2) {
- if( pwd2 =="" ) {
- //alert("/请输入密码确认!")
- document.getElementById("pwd2Err").innerHTML = "<font color='red'>请输入密码确认!</font>";
- form.pwd2.focus()
- return false;
- }
- if( pwd2 != form.pwd.value ) {
- //alert("/两次密码输入不一致!")
- document.getElementById("pwd2Err").innerHTML = "<font color='red'>两次密码输入不一致!</font>";
- form.pwd2.focus()
- return false;
- }
- document.getElementById("pwd2Err").innerHTML = "";
- return true;
- }
- function strlen(str){
- var len;
- var i;
- len = 0;
- for (i=0;i<str.length;i++){
- if (str.charCodeAt(i)>255) len+=2; else len++;
- }
- return len;
- }
- function strlen2(str){
- var len;
- var i;
- len = 0;
- for (i=0;i<str.length;i++){
- if (str.charCodeAt(i)>255) return true;
- }
- return false;
- }
- function isWhiteWpace (s)
- {
- var whitespace = " /t/n/r";
- var i;
- for (i = 0; i < s.length; i++){
- var c = s.charAt(i);
- if (whitespace.indexOf(c) >= 0) {
- return true;
- }
- }
- return false;
- }
- function isSsnString (ssn)
- {
- var re=/^[0-9a-z][/w-.]*[0-9a-z]$/i;
- if(re.test(ssn))
- return true;
- else
- return false;
- }
- function checkssn(gotoURL) {
- var ssn=form.username.value.toLowerCase();
- if (checkUserName(ssn)){
- var open_url = gotoURL + "?username=" + ssn;
- window.open(open_url,'','status=0,directories=0,resizable=0,toolbar=0,location=0,scrollbars=0,width=322,height=200');
- }
- }
2. userReg2.html
- <html>
- <head>
- <title>表单</title>
- <mce:script language=JavaScript src="script/regcheckdata.js" mce_src="script/regcheckdata.js"></mce:script>
- <mce:script type="text/javascript"><!--
- // --></mce:script>
- </head>
- <body>
- <form name="form" action="01.html" method="get" onSubmit="return checkdata()">
- <table width="750" align="center" border="2">
- <tr>
- <td colspan="2" align="center">用户注册</td>
- </tr>
- <tr>
- <td>用户名:</td>
- <td>
- <input type=text name="username" size="30" maxlength="10" onblur="checkUserName(this.value.toLowerCase())">
- <span id="usernameErr"></span>//同一行(首选)
- <!--<div id="usernameErr"></div>-->//另起一行
- </td>
- </tr>
- <tr>
- <td>密码:</td>
- <td>
- <input type=password name="pwd" size="15" maxlength="12" onblur="checkPassword1(this.value)">
- <span id="pwdErr"></span>
- </td>
- </tr>
- <tr>
- <td>密码确认</td>
- <td>
- <input type=password name="pwd2" size="15" maxlength="12" onblur="checkPassword2(this.value)">
- <span id="pwd2Err"></span>
- </td>
- </tr>
- <tr>
- <td>性别</td>
- <td>
- <input type=radio name="sex" value="male">男
- <input type=radio name="sex" value="female">女
- </td>
- </tr>
- <tr>
- <td>你感兴趣</td>
- <td>
- <input type="checkbox" name="interest" value="vc" checked>VC
- <input type="checkbox" name="interest" value="vb">VB
- <input type="checkbox" name="interest" value="vfoxpro">VF
- <input type="checkbox" name="interest" value="vjava">VJ
- <br>
- <input type="checkbox" name="interest" value="bc">BC
- <input type="checkbox" name="interest" value="cobol">CO
- <input type="checkbox" name="interest" value="java">JA
- <input type="checkbox" name="interest" value="delphi">Delphi
- </td>
- </tr>
- <!--必须选中JSP-->
- <input type="hidden" name="interest" value="jsp">
- <tr>
- <td>你感兴趣</td>
- <td>
- <select name="interest2" size=8 multiple>
- <option value="vc" selected>VC</option>
- <option value="vb">VB</option>
- <option value="vfoxpro">VF</option>
- <option value="vjava">VJ</option>
- <option value="bc">BC</option>
- <option value="cobol">CO</option>
- <option value="java">JA</option>
- <option value="delphi">Delphi</option>
- </select>
- </td>
- </tr>
- <tr>
- <td>你来自</td>
- <td>
- <select name="province">
- <option value=0 selected>请选择</option>
- <option value=34>安徽</option>
- <option value=11>北京</option>
- <option value=50>重庆</option>
- <option value=35>福建</option>
- <option value=62>甘肃</option>
- <option value=44>广东</option>
- <option value=45>广西</option>
- <option value=52>贵州</option>
- <option value=46>海南</option>
- <option value=13>河北</option>
- <option value=23>黑龙江</option>
- <option value=41>河南</option>
- <option value=42>湖北</option>
- <option value=43>湖南</option>
- <option value=32>江苏</option>
- <option value=36>江西</option>
- <option value=22>吉林</option>
- <option value=21>辽宁</option>
- <option value=64>宁夏</option>
- <option value=15>内蒙古</option>
- <option value=63>青海</option>
- <option value=31>上海</option>
- <option value=14>山西</option>
- <option value=37>山东</option>
- <option value=51>四川</option>
- <option value=61>陕西</option>
- <option value=12>天津</option>
- <option value=54>西藏</option>
- <option value=65>新疆</option>
- <option value=53>云南</option>
- <option value=33>浙江</option>
- <option value=71>台湾</option>
- <option value=81>香港</option>
- <option value=82>澳门</option>
- <option value=0>其他</option>
- </select>
- </td>
- </tr>
- <tr>
- <td>自我介绍</td>
- <td>
- <textarea rows="12" cols="80" name="intro">
Javascript_06_表单验证(离开单项,输入框后提示信息)的更多相关文章
- ASP.NET 表单验证实现浅析
首先,自然是配置 Web.config,在 <system.web> 下设定: <authentication mode="Forms"> <form ...
- Angular自定义表单验证
前端表单验证 为年龄输入框添加了两个验证,并分情况填写了提示语 <form nz-form [formGroup]="validateForm"> <nz-for ...
- SPA项目开发--表单验证、增删改
1. 表单验证 Form组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则, 并将Form-Item的prop属性设置为需校验的字段名即可 <el-form- ...
- ElementUI表单验证攻略:解决表单项启用和禁用验证的切换,以及动态表单验证的综合性问题
试想一种比较复杂的业务场景: 表格(el-table)的每一行数据的第一列是勾选框,最后一列是输入框.当某一行的勾选框勾上时,启用该行的输入框,并开启该行输入框的表单验证:取消该行的勾选框,则禁用该行 ...
- Extjs 表单验证后,几种错误信息展示方式
今天要求对form表单验证,进行系统学习一下,故做了几个示例: Ext.onReady(function(){ var panel=Ext.create('Ext.form.Panel' ...
- python :表单验证--对每一个输入框进行验证
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- ElementUi 表单验证失败后 页面滚动到表单验证失败位置
1.应用场景 当进行长表单验证时 用户填写到了单子的最下面 可是已经滚动过去的部分单子验证失败 为了友好的用户体验 这时候就需要滚动到验证失败位置 2.解决思路 elementUi本身并没有提供相关获 ...
- JQuery制作网页——第九章 表单验证
1. 表单验证:减轻服务器的压力.保证输入的数据符合要求: 2. 常用的表单验证:日期格式.表单元素是否为空.用户名和密码.E-mail地址.身份证号码等: 3. 表单验证的思路: 1. ...
- JQuery制作网页——表单验证
1. 表单验证:减轻服务器的压力.保证输入的数据符合要求: 2. 常用的表单验证:日期格式.表单元素是否为空.用户名和密码.E-mail地址.身份证号码等: 3. 表单验证的思路: 1. ...
随机推荐
- 一张图读懂PBN飞越转弯衔接DF航段计算
飞越转弯衔接TF航段时,转弯外边界与旁切转弯相似,只是在拐角位置直接以风螺旋绘制外边界,大部分切点可以精确计算得到. 飞越转弯衔接DF航段时,转弯外边界全部由风螺旋和它的切线构成,又会有哪些神奇的事情 ...
- Ansible常用模块介绍及使用(week5_day1_part2)--技术流ken
Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)--技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几 ...
- Netty实战三之Netty的组件和设计
有关Netty,我们可以从两个视角来讨论Netty:类库的视角以及框架的视角,对于使用Netty编写高效的.可重用的和可维护的代码来说,两者缺一不可. Netty解决了两个响应的关注领域,可以大致标志 ...
- python使用tcp实现一个简单的下载器
上一篇中介绍了tcp的流程,本篇通过写一个简单的文件下载器程序来巩固之前学的知识. 文件下载器的流程如下: 客户端: 输入目标服务器的ip和port 输入要下载文件的名称 从服务器下载文件保存到本地 ...
- 面试必会之HashMap源码分析
相关文章 面试必会之ArrayList源码分析 面试必会之LinkedList源码分析 简介 HashMap最早出现在JDK1.2中,底层基于散列算法实现.HashMap 允许 null 键和 nul ...
- 并发之AQS
一.概述 谈到并发,不得不谈ReentrantLock:而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQ ...
- canvas-8searchLight4.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linux 安装 jdk8
切换目录 cd /usr 创建目录 mkdir java cd java 下载 jdk rz 或者 ftp 都行,只要能成功上传 解压 tar zxvf jdk-8u181-linux-x64.tar ...
- 转载------35岁开始转变的观念(干了这碗鸡汤再写代码保证没有bug)
作为一个标准的IT男,从一开始的一线开发,做到管理层,又因为喜爱开发,跳槽继续专注coding,一干就是10多年.有时候就想,这样一直学习,coding,如果能干到老也挺不错的! 不过生活的压力是不会 ...
- Python Python实现批量安装android apk包
基于Python实现批量安装android apk包 by:授客 QQ:1033553122 1.相关软件包及文件下载 下载地址:adb软件包及批量安装apk包的py文件.zip 2.测试环境 Win ...