<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style>
*{margin:0;padding:0;}
a{text-decoration:none;}
i{font-weight:bold;font-style:normal;}
.blue{color:#4095ce;}
.red{color:#f00;}
.w100{width:100px;}
.w190{width:190px;}
.w250{width:250px;}
.w355{width:355px;}
.form_main{
padding:10px;
margin:50px auto;
width:630px;
height:auto;
border:1px solid #f4f4f4;
overflow:hidden;
}
.row{
padding:15px 0;
border-bottom:1px solid #f4f4f4;
}
.row input[type=text]:focus,.row input[type=password]:focus{
border:1px solid #ffd020;
outline:none;
width:250px;
}
.row select:focus{
border:1px solid #ffd020;
outline:none;
}
.row label{
display:inline-block;
padding-right:10px;
text-align:right;
vertical-align:middle;
}
.row .input_type{
display:inline-block;
padding:10px 5px;
vertical-align:middle;
border:1px solid #abadb3;
-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.1);
-moz-box-shadow:inset 0 1px 3px rgba(0,0,0,0.1);
transition:border .2s linear .1s,width .2s linear .1s;
}
.row .input_type.cor{
border:1px solid #a6ce38;
}
.row .input_type.err{
border:1px solid #f00;
}
.row .radio_type{
display:inline-block;
margin-right:5px;
vertical-align:middle;
}
.row .select_type{
vertical-align:middle;
transition:border .2s linear .1s,width .2s linear .1s;
}
.row .select_type.cor{
border:1px solid #f00;
}
.row .select_type.err{
border:1px solid #f00;
}
.row .checkbox_type{
vertical-align:middle;
}
.row .textarea_type{
position:relative;
padding:5px 0;
height:100px;
display:inline-block;
vertical-align:middle;
border:1px solid #abadb3;
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
-moz-box-shadow:inset 0 1px 3px rgba(0,0,0,0.1);
}
.row .intextarea{
display:inline-block;
float:left;
margin-left:7px;
padding:5px;
width:330px;
height:70px;
text-indent:20px;
line-height:20px;
text-align:justify;
border:0;
resize:none;
outline:none;
overflow-y:hidden;
overflow:hidden;
}
.row .textarea_type:hover{
border:1px solid #ffd020;
}
.row .word_msg{
position:absolute;
right:5px;
bottom:3px;
font-size:13px;
color:#999;
}
.row .argee_text{
font-size:14px;
color:#999;
}
.row .regBtn{
width:120px;
height:40px;
line-height:40px;
font-size:16px;
font-family:'Microsoft YaHei';
text-align:center;
border-radius:5px;
color:#a33300;
background:#ffd020;
background:-webkit-linear-gradient(top,#ffd020,#ffc313);
border:1px solid #e79f14;
cursor:pointer;
}
.row .regBtn:hover{
background:#ffda59;
background:-webkit-linear-gradient(top,#ffda59,#ffc806);
}
.row .regBtn:active {
border:1px solid #e79f14;
color:#e44700;
background:#ffd020;
}
.row span{
display:inline-block;
margin-left:10px;
vertical-align:middle;
font-size:12px;
color:#4095ce;
}
.row span.err{
color:#f00;
}
.row span.cor{
color:#a6ce38;
}
</style>
</head>
<body>
<div class="form_main">
<form action="http://www.baidu.com" method="post" id="form" target="_blank">
<div class="row">
<label for="username" class="w100">用户名</label>
<input type="text" class="input_type w190" id="username" must="true" />
</div>
<div class="row">
<label for="password" class="w100">密码</label>
<input type="password" class="input_type w190" id="password" must="true" />
</div>
<div class="row">
<label for="repassword" class="w100">确认密码</label>
<input type="password" class="input_type w190" id="repassword" must="true" />
</div>
<div class="row">
<label for="email" class="w100">电子邮箱</label>
<input type="text" class="input_type w250" id="email" must="true" />
</div>
<div class="row">
<label for="info" class="w100">个人简介</label><span class="w355 textarea_type" id="textarea_type">
<textarea id="info" class="intextarea" autocomplete="off" must="true" ></textarea>
<div class="word_msg" id="word_msg">还可以输入<i>100</i>字</div>
</span>
</div>
<div class="row">
<label for="" class="w100">性别</label>
<input type="radio" class="radio_type" id="man" name="sex" checked="checked" /><label for="man">男</label>
<input type="radio" class="radio_type" id="woman" name="sex" /><label for="woman">女</label>
</div>
<div class="row">
<label for="job" class="w100">职业</label>
<select class="select_type" id="job" must="true">
<option value="0" selected="selected">选择职业</option>
<option value="1">平面设计师</option>
<option value="2">绘画/插画师</option>
<option value="3">三维/动画师</option>
<option value="4">网页设计师</option>
<option value="5">网页制作</option>
<option value="6">GUI设计师</option>
<option value="7">Flash动画师</option>
<option value="8">产品设计师</option>
</select>
</div>
<div class="row" style="display:none;">
<label>现居</label>
<select class="select_type">
<option value="0" selected="selected">选择省份</option>
<option value="1">北京</option>
<option value="2">上海</option>
<option value="3">天津</option>
<option value="4">重庆</option>
<option value="5">黑龙江</option>
<option value="6">辽宁</option>
<option value="7">吉林</option>
<option value="8">河北</option>
<option value="9">内蒙古</option>
<option value="10">陕西</option>
<option value="11">山西</option>
<option value="12">甘肃</option>
<option value="13">宁夏</option>
<option value="14">新疆</option>
<option value="15">西藏</option>
<option value="16">青海</option>
<option value="17">四川</option>
<option value="18">云南</option>
<option value="19">贵州</option>
<option value="20">湖南</option>
<option value="21">湖北</option>
<option value="22">河南</option>
<option value="23">山东</option>
<option value="24">安徽</option>
<option value="25">江苏</option>
<option value="26">浙江</option>
<option value="27">台湾</option>
<option value="28">香港</option>
<option value="29">澳门</option>
<option value="30">广东</option>
<option value="31">广西</option>
<option value="32">江西</option>
<option value="33">福建</option>
<option value="34">海南</option>
<option value="35">其它</option>
<option value="36">美国</option>
<option value="37">欧洲</option>
<option value="38">日本</option>
<option value="39">韩国</option>
<option value="40">新加坡</option>
<option value="41">加拿大</option>
<option value="42">亚 洲</option>
<option value="43">非 洲</option>
<option value="44">澳 洲</option>
<option value="45">南美洲</option>
<option value="46">东南亚</option>
</select>
</div>
<div class="row">
<label class="w100"></label>
<input type="checkbox" name="checkbox" class="checkbox_type" id="agree_checkbox" must="true" />
<label class="argee_text" for="agree_checkbox">我已阅读并接受 <a href="" class="blue">版权声明</a> 和 <a href="" class="blue">隐私保护</a> 条款</label>
</div>
<div class="row">
<label class="w100"></label>
<input type="submit" value="免费注册" class="regBtn" id="regBtn" />
</div>
</form>
</div>
<script>
window.onload = function () {
var oForm = document.getElementById('form'),
inputText1 = document.getElementById('username'),
passwordID = document.getElementById('password'),
repasswordID = document.getElementById('repassword'),
emailID = document.getElementById('email'),
selectID = document.getElementById('job'),
oAgree_checkbox = document.getElementById('agree_checkbox'),
oTextarea_box = document.getElementById('textarea_type'),
oInfo = document.getElementById('info'),
oWord_msg = document.getElementById('word_msg');
/*
调用方法:
HTML: <input type="" must="true" /> 加了must="true"为需要验证的项
JS:
var checkForm = new Check_form();
checkForm.init({
formID: formID, //表单的id(必填)
text_msg: [], //验证信息提示,(必填), 例:text_msg: ['4-16个字符,字母/中文/数字/下划线。', '4-16个字符,区分大小写。']
err_text: [], //验证错误时的信息提示(必填), 例:text_msg: ['您输入的用户名不符合要求,请检查。', '密码不能为空请重新输入。']
cor_text: [], //验证正确时的信息提示(必填), 例:text_msg: ['输入正确。', '输入正确。']
check_arr:[], //验证方法(顺序书写)
btnFn:function(){}, //扩展添加新的验证数据
});
*/
var f1 = new Check_form();
f1.init({
formID: oForm,//表单ID
text_msg: ['4-16个字符,字母/中文/数字/下划线。', '4-16个字符,区分大小写。', '请再次输入密码,区分大小写。', '请输入有效的邮箱地址。', '', '您的职业是?', ''],
err_text: ['您输入的用户名不符合要求,请检查。', '密码不能为空请重新输入。', '两次密码不一致,请重新输入。', '您输入的邮箱不符合要求,请检查。', '已超出字符限制。', '您的职业还没选择哦~', '您还没接受条款哦~'],
cor_text: ['可用的用户名。', '输入正确。', '输入正确。', '输入正确。', ' COOL!', 'COOL!', '您已接受条款'],
checkArr: [ //验证方法(按顺序书写)
check_inputText1 = function () {
if (inputText1.value == '' || inputText1.value.length >= 17) {
return false;
}
else {
return true;
}
},
check_pass = function () {
if (passwordID.value == '' || passwordID.value.length >= 17) {
return false;
}
else {
return true;
}
},
check_repass = function () {
if (repasswordID.value != passwordID.value || repasswordID.value == '') {
return false;
}
else {
return true;
}
},
check_email = function () {
var re = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
if (re.test(emailID.value) != true) {
return false;
}
else {
return true;
}
},
check_word = function () {
if (stringSize(oInfo.value) > 100) {
return false;
}
else {
return true;
}
function stringSize(s) {
return s.length + (s.match(/[^\x00-\xff]/g) || '').length;
}
},
check_select1 = function () {
if (selectID.value == 0) {
return false;
}
else {
return true;
}
},
check_agreeTk = function () {
if (oAgree_checkbox.checked) {
return true;
}
else {
return false;
}
}
],
checkWord: {//textarea字符验证
textareaID: oInfo,
wordID: oWord_msg,
maxNum: 100
}
/*btnFn: function () {//函数只能返回true/false
f1.createErrOrCor(selectID, 4);
f1.createErrOrCor(oAgree_checkbox, 5);
f1.createErrOrCor(oTextarea_box, 6);
var cSelect = (function () {
if (selectID.value) {
return true;
}
else {
return false;
}
})();
var cTk = (function () {
if (oAgree_checkbox.checked) {
return true;
}
else {
return false;
}
})();
return cSelect && cTk;
}*/
});
f1.word_dal();
};
/*****************************************************************************************************/
function Check_form() { };
Check_form.prototype = {
init: function (opt) {
this.formID = opt.formID;
this.text_msg = opt.text_msg;
this.err_text = opt.err_text;
this.cor_text = opt.cor_text;
this.checkArr = opt.checkArr;
this.checkWord = opt.checkWord;
this.startCheck();
this.btnClick(opt.btnFn);
},
startCheck: function () {//开始验证
var _this = this;
this.aInput = this.formID.getElementsByTagName('input');
this.aSelect = this.formID.getElementsByTagName('select');
this.aTextarea = this.formID.getElementsByTagName('textarea');
this.screen(
function (thisCheck, Index) {//给需要验证的项绑定事件
_this.onFocus(thisCheck, Index);
_this.onBlurs(thisCheck, Index);
}
);
},
screen: function (Fn) {//筛选出需要验证的项
var _this = this;
var num = 0;
var t = 0;
this.form_arr = this.formID.elements;
for (var i = 0; i < this.form_arr.length; i++) {
(function (Index) {
if (_this.form_arr[Index].getAttribute('must') == 'true') {
Fn(_this.form_arr[Index], num++);
t++;
if (num >= t) {
num = t;
}
}
})(i);
};
},
onFocus: function (thisCheck, Index) {//获得焦点
var _this = this;
myEvent(thisCheck, 'focus', function () {
thisCheck.parentNode.removeChild(thisCheck.nextSibling);
var oSpan = document.createElement('span');
oSpan.innerHTML = _this.text_msg[Index];
thisCheck.parentNode.insertBefore(oSpan, thisCheck.nextSibling);
});
},
onBlurs: function (thisCheck, Index) {//失去焦点
var _this = this;
myEvent(thisCheck, 'blur', function () {
_this.createErrOrCor(thisCheck, Index);
});
},
createErrOrCor: function (thisCheck, Index) {//创建span (错误或者正确的状态)。
var _this = this;
_this.verify(Index);
thisCheck.parentNode.removeChild(thisCheck.nextSibling);
var oSpan = document.createElement('span');
if (_this.result[Index]) {
oSpan.innerHTML = _this.cor_text[Index];
oSpan.className = 'cor';
oSpan.style.border = 'none';
thisCheck.style.border = '1px solid #a6ce38';
thisCheck.parentNode.insertBefore(oSpan, thisCheck.nextSibling);
}
else {
oSpan.innerHTML = _this.err_text[Index];
oSpan.className = 'err';
oSpan.style.border = 'none';
thisCheck.style.border = '1px solid #f00';
thisCheck.parentNode.insertBefore(oSpan, thisCheck.nextSibling);
}
},
verify: function (Index) {//验证判断
var _this = this;
this.result = [];
if (Index === 0 || Index) {
this.result[Index] = this.checkArr[Index]();
}
else {
for (var i = 0; i < this.checkArr.length; i++) {
this.result.push(this.checkArr[i]());
};
}
},
btnClick: function (f) {//提交验证
var _this = this;
this.formID.onsubmit = function () {
var n = true;
_this.screen(function (thisCheck, Index) {
_this.createErrOrCor(thisCheck, Index);
if (_this.result[Index] == false) {
n = false;
}
else if (_this.result[Index] == _this.result[Index] + 1) {
n = true;
}
});
if (f) {
return f() && n;
}
else {
return n;
}
};
},
word_dal: function () {//textarea输入字符判断
var _this = this;
myEvent(_this.checkWord.textareaID, 'keyup', function () {
var text_len = stringSize(_this.checkWord.textareaID.value);
_this.checkWord.wordID.innerHTML = text_len <= _this.checkWord.maxNum ? '还可以输入' + '<i>' + (_this.checkWord.maxNum - text_len) + '</i>' + '字' : '已超出' + '<i>' + -(_this.checkWord.maxNum - text_len) + '</i>' + '字';
function stringSize(s) {
return s.length + (s.match(/[^\x00-\xff]/g) || '').length;
}
});
}
};
function myEvent(obj, sEvent, fn) {
obj.attachEvent ? obj.attachEvent('on' + sEvent, fn) : obj.addEventListener(sEvent, fn, false);
};
</script>
</body>
</html>