IFE-2016-SP_task30_verify_input_multi
by baishusama
HTML
<fieldset>
<legend>用户信息填写</legend>
<div class="wrapper">
<label for="name">用户名</label>
<input type="text" id="name" />
<span class="info">必填项。长度为 4 ~ 16 个字符。</span>
</div>
<div class="wrapper">
<label for="pwd">密码</label>
<input type="password" id="pwd">
<span class="info">必填项。长度为 4 ~ 16 个字符,必须包含数字和字母。</span>
</div>
<div class="wrapper">
<label for="repeatPwd">密码确认</label>
<input type="password" id="repeatPwd">
<span class="info">必填项。必须和上方密码一致。</span>
</div>
<div class="wrapper">
<label for="email">邮箱</label>
<input type="text" id="email">
<span class="info">必填项。需为 [email protected] 格式。</span>
</div>
<div class="wrapper">
<label for="mobile">手机</label>
<input type="number" id="mobile">
<span class="info">必填项。</span>
</div>
<input type="button" id="verify" value="提交" />
</fieldset>
CSS
body {
margin: 0;
}
fieldset {
margin: 20px 10px;
border-radius: 6px;
}
.wrapper {
overflow: hidden;
padding: 5px;
}
.wrapper label {
float: left;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding-right: 2%;
width: 20%;
text-align: right;
line-height: 22px;
}
.wrapper input {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
float: right;
border: 1px solid #555;
border-radius: 3px;
padding: 0 6px;
width: 80%;
line-height: 20px;
outline: none;
}
.wrapper .info {
display: none;
float: right;
padding: 3px 0;
width: 80%;
color: #ddd;
font-size: 12px;
}
.wrapper input:focus + .info {
display: block;
}
.wrapper .invalid {
border-color: red;
}
.wrapper .valid {
border-color: yellowgreen;
}
.wrapper .invalid + .info {
display: block;
color: red;
}
.wrapper .valid + .info {
display: block;
color: yellowgreen;
}
#verify {
float: right;
margin-right: 5px;
border: 1px solid steelblue;
border-radius: 3px;
padding: 0 6px;
width: 10%;
background-color: steelblue;
color: #fff;
line-height: 20px;
outline: none;
}
JavaScript
/*--------------------
通用函数
--------------------*/
// 解决 IE 和非 IE 浏览器在事件绑定方面的兼容性
function addEventHandler(elem, event, handler) {
if (elem.addEventListener) {
elem.addEventListener(event, handler, false);
} else if (elem.attachEvent) {
elem.attachEvent("on" + event, handler);
} else {
elem["on" + event] = handler;
}
}
// 用于偷懒的 $ 方法
function $(selector) {
var elem = null;
if (selector.indexOf('#') === 0) {
elem = document.getElementById(selector.slice(1));
} else if (selector.indexOf('.') === 0) {
elem = document.getElementsByClassName(selector.slice(1));
}
return elem;
}
// 用于添加类名
function addClassName(elem, newClassName) {
if (elem.className.split(/\s/).indexOf(newClassName) === -1) {
elem.className += (' ' + newClassName);
return true;
}
return false;
}
// 用于删除类名
function removeClassName(elem, oldClassName) {
var names = elem.className.split(/\s/);
var index = names.indexOf(oldClassName);
if (index !== -1) {
names.splice(index, 1);
elem.className = names.join(' ');
return true;
}
return false;
}
/*--------------------
DOM
--------------------*/
var verifyBtn = $("#verify");
var nameDOM = $("#name");
var pwdDOM = $("#pwd");
var repeatPwdDOM = $("#repeatPwd");
var emailDOM = $("#email");
var mobileDOM = $("#mobile");
// var infoDOM = nameDOM.nextElementSibling;
/*--------------------
提示信息
--------------------*/
var invalidCases = {
"isEmpty": "不能为空!",
"containWhiteSpace": "不能包含空格!",
"invalidChar": "只能由数字、字母、特殊符号组成!",
"invalidLength": "长度要在 4 ~ 16 个字符内!",
"unconsistentWithPwd": "需要和第一次输入的密码一致!",
"invalideEmail": "格式非法!需为 [email protected] 格式。",
"invalideMobileNumber": "号码非法!需为 11 位数字。"
};
var validCases = {
"用户名": "用户名格式正确",
"密码": "密码可用",
"密码确认": "两次密码输入一致",
"邮箱": "邮箱格式正确",
"手机": "手机格式正确"
};
/* 寄生组合式继承 */
function inheritPrototype(subType, superType) {
...