我们来看看如果使用Knockout更简单的来实现密码强度的验证。
原有代码请查看:
复制代码 代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
//CharMode函数
function CharMode(iN) {
if (iN >=48&& iN <=57) //数字
return1;
if (iN >=65&& iN <=90) //大写字母
return2;
if (iN >=97&& iN <=122) //小写
return4;
else
return8; //特殊字符
}
//bitTotal函数
function bitTotal(num) {
modes =0;
for (i =0; i <4; i++) {
if (num &1) modes++;
num >>>=1;
}
return modes;
}
//checkStrong函数
function checkStrong(sPW) {
if (sPW.length <=4)
return0; //密码太短
Modes =0;
for (i =0; i < sPW.length; i++) {
Modes |= CharMode(sPW.charCodeAt(i));
}
return bitTotal(Modes);
}
//pwStrength函数
function pwStrength(pwd) {
O_color ="#eeeeee";
L_color ="#FF0000";
M_color ="#FF9900";
H_color ="#33CC00";
if (pwd ==null|| pwd =='') {
Lcolor = Mcolor = Hcolor = O_color;
} else {
S_level = checkStrong(pwd);
switch (S_level) {
case0:
Lcolor = Mcolor = Hcolor = O_color;
case1:
Lcolor = L_color;
Mcolor = Hcolor = O_color;
break;
case2:
Lcolor = Mcolor = M_color;
Hcolor = O_color;
break;
default:
Lcolor = Mcolor = Hcolor = H_color;
}
document.getElementById("strength_L").style.background = Lcolor;
document.getElementById("strength_M").style.background = Mcolor;
document.getElementById("strength_H").style.background = Hcolor;
return;
}
} </script>
<form name="form1" action="">
输入密码:<input type="password" size="10" onkeyup="pwStrength(this.value)" onblur="pwStrength(this.value)">
<br>
密码强度:
<table width="217" border="1" cellspacing="0" cellpadding="1" bordercolor="#cccccc"
height="23" style='display: inline'>
<tr align="center" bgcolor="#eeeeee">
<td width="33%" id="strength_L">
弱
</td>
<td width="33%" id="strength_M">
中
</td>
<td width="33%" id="strength_H">
强
</td>
</tr>
</table>
</form>
</body>
</html>
首先我们来改善一下上面博友的验证函数为如下代码:
复制代码 代码如下:
var Page = Page || {};
Page.Utility = Page.Utility || {};
Page.Utility.Registration = Page.Utility.Registration || {};
//获取密码强度
Page.Utility.Registration.getPasswordLevel = function (password) {
if (password == null || password == '')
return 0;
if (password.length <= 4)
return 0; //密码太短
var Modes = 0;
for (i = 0; i < password.length; i++) {
Modes |= CharMode(password.charCodeAt(i));
}
return bitTotal(Modes);
//CharMode函数
function CharMode(iN) {
if (iN >= 48 && iN <= 57) //数字
return 1;
if (iN >= 65 && iN <= 90) //大写字母
return 2;
if (iN >= 97 && iN <= 122) //小写
return 4;
else
return 8; //特殊字符
}
//bitTotal函数
function bitTotal(num) {
modes = 0;
for (i = 0; i < 4; i++) {
if (num & 1) modes++;
num >>>= 1;
}
return modes;
}
};
然后来创建View Model,但是引用Knockout之前,我们首先要引用Knockout的Js类库(具体介绍请查看Knockout应用开发指南的系列教程)
代码如下:
复制代码 代码如下:
var viewModel = {
Password: ko.observable(""),
Ocolor: "#eeeeee"
};
对于密码强度以及颜色的值依赖于密码字符串的值,所以我们需要为他们声明依赖属性,代码如下:
viewModel.PasswordLevel = ko.dependentObservable(function () {
return Page.Utility.Registration.getPasswordLevel(this.Password());
}, viewModel);
viewModel.Lcolor = ko.dependentObservable(function () {
//根据密码强度判断第一个格显示的背景色
return this.PasswordLevel() == 0 ? this.Ocolor : (this.PasswordLevel() == 1 ? "#FF0000" : (this.PasswordLevel() == 2 ? "#FF9900" : "#33CC00"))
}, viewModel);
viewModel.Mcolor = ko.dependentObservable(function () {
//根据密码强度判断第二个格显示的背景色
return this.PasswordLevel() < 2 ? this.Ocolor : (this.PasswordLevel() == 2 ? "#FF9900" : "#33CC00")
}, viewModel);
viewModel.Hcolor = ko.dependentObservable(function () {
//根据密码强度判断第三个格显示的背景色
return this.PasswordLevel() < 3 ? this.Ocolor : "#33CC00"
}, viewModel);
然后使用applyBindings方法将view model绑定到该页面,你可以使用jQuery的ready函数来执行该绑定代码,也可以在页面最下方执行绑定代码,我们这里使用了jQuery,代码如下:
$((function () {
ko.applyBindings(viewModel);
}));
最后,我们再看看这些值怎么动态绑定到HTML元素上的,请查看如下代码(其中使用了afterkeydown代替了onKeyUp和onBlur):
复制代码 代码如下:
<form name="form1" action="">
输入密码:
<input type="text" size="10" data-bind="value:Password, valueUpdate: 'afterkeydown'">
<br>
密码强度:
<table width="217" border="1" cellspacing="0" cellpadding="1" bordercolor="#cccccc"
height="23" style='display: inline'>
<tr align="center" bgcolor="#eeeeee">
<td width="50"data-bind="style: { backgroundColor: Lcolor }">弱</td>
<td width="50"data-bind="style: { backgroundColor: Mcolor }">中</td>
<td width="50"data-bind="style: { backgroundColor: Hcolor }">强</td>
</tr>
</table>
</form>
然后就OK,运行代码查看,一模一样的功能展示出来了。
如果去掉为验证而改善的代码,总代码肯定是比原有的方式少的。
完整版代码如下:
复制代码 代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script type="text/javascript" src="http://knockoutjs.com/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="http://knockoutjs.com/js/jquery.tmpl.js"></script>
<script type="text/javascript" src="http://knockoutjs.com/js/knockout-1.2.1.js"></script>
</head>
<body>
<script type="text/javascript">
var Page = Page || {};
Page.Utility = Page.Utility || {};
Page.Utility.Registration = Page.Utility.Registration || {};
//获取密码强度
Page.Utility.Registration.getPasswordLevel =function (password) {
if (password ==null|| password =='')
return0;
if (password.length <=4)
return0; //密码太短
var Modes =0;
for (i =0; i < password.length; i++) {
Modes |= CharMode(password.charCodeAt(i));
}
return bitTotal(Modes);
//CharMode函数
function CharMode(iN) {
if (iN >=48&& iN <=57) //数字
return1;
if (iN >=65&& iN <=90) //大写字母
return2;
if (iN >=97&& iN <=122) //小写
return4;
else
return8; //特殊字符
}
//bitTotal函数
function bitTotal(num) {
modes =0;
for (i =0; i <4; i++) {
if (num &1) modes++;
num >>>=1;
}
return modes;
}
};
var viewModel = {
Password: ko.observable(""),
Ocolor: "#eeeeee"
};
viewModel.PasswordLevel = ko.dependentObservable(function () {
return Page.Utility.Registration.getPasswordLevel(this.Password());
}, viewModel);
viewModel.Lcolor = ko.dependentObservable(function () {
//根据密码强度判断第一个格显示的背景色
returnthis.PasswordLevel() ==0?this.Ocolor : (this.PasswordLevel() ==1?"#FF0000" : (this.PasswordLevel() ==2?"#FF9900" : "#33CC00"))
}, viewModel);
viewModel.Mcolor = ko.dependentObservable(function () {
//根据密码强度判断第二个格显示的背景色
returnthis.PasswordLevel() <2?this.Ocolor : (this.PasswordLevel() ==2?"#FF9900" : "#33CC00")
}, viewModel);
viewModel.Hcolor = ko.dependentObservable(function () {
//根据密码强度判断第二个格显示的背景色
returnthis.PasswordLevel() <3?this.Ocolor : "#33CC00"
}, viewModel);
$((function () {
ko.applyBindings(viewModel);
}));
</script>
<form name="form1" action="">
输入密码:<input type="text" size="10" data-bind="value:Password, valueUpdate: 'afterkeydown'">
<br>
密码强度:
<table width="217" border="1" cellspacing="0" cellpadding="1" bordercolor="#cccccc"
height="23" style='display: inline'>
<tr align="center" bgcolor="#eeeeee">
<td width="50" id="strength_L" data-bind="style: { backgroundColor: Lcolor }">
弱
</td>
<td width="50" id="strength_M" data-bind="style: { backgroundColor: Mcolor }">
中
</td>
<td width="50" id="strength_H" data-bind="style: { backgroundColor: Hcolor }">
强
</td>
</tr>
</table>
</form>
</body>
</html>
相关推荐:
seo辅助词选什么,seo助手 ,各车企ai
SEO薪资这些,你也能月入过万!,天水网站建设公司
SEO可以改变你的商业未来:如何通过优化提升网站流量和转化率,五粮液营销推广
seo网站页面优化包括什么,seo页面优化技术 ,no ai写作
seo相当于什么职业,seo相当于什么职业类别 ,usatisfy ai
不利于seo是什么,不属于seo对网店推广的作用 ,ai渐变下载
好用的人工智能AI软件推荐,让你的生活更智能!
SEO新人必读:从零开始SEO的核心技巧与实践指南,网站邮件推广设计
seo系列什么意思,seo的分类 ,que n ai je
ChatGPT无法加载?检查网络并尝试重启,助您快速恢复畅通体验,burj ai
ChatGPT对于大数据发展的帮助:赋能行业变革,推动智能化未来,ai写作真的好吗
SEO站外优化策略:提升网站排名的关键因素,遵义公司网站推广
怎么降低文章的AI生成率:打造更真实、更有价值的内容
SEO专业怎么样?未来发展的无限潜力与职业前景,联通ai智能早教
AI免费生成文本,内容创作新篇章
OpenAI银联支付-未来支付新体验,安全便捷全新升级,医学加ai
ChatGPT常见问题汇总:解答你关于AI的一切疑惑,松鼠ai智能教适应教育
seo要学什么语言,做seo需要什么语言 ,ai martino
SEO地址优化的秘诀:提升网站排名与流量的关键,临沂如何优化网站关键词
SEO广告:如何借助SEO提升品牌曝光与销售业绩?,网站推广怎么选择
怎么用AI写出令人惊叹的文章?轻松搞定写作难题!
英语日记AI生成:轻松提升英语水平的智能助手
Bing无法使用怎么办?解决方法及替代方案推荐!,ai文字设计教程
AI自动读文:让阅读更轻松、更高效的智能革命,寄ai空
如何选择适合你的AI工具?全面解析AI工具哪个好用
为什么seo推广那么多,seo推广难吗 ,东莞ai听译平台
seo灰帽是什么,灰帽是指什么 ,ai绘画六边形
SEO刷:让你的网站一夜之间登顶搜索引擎!,独特seo技巧
SEO优化:如何让网站更具有吸引力,散文ai写作咒语是什么
SEO添加:提升网站流量与排名的必备策略,seo团队成员中国人
ChatGPT打不开了吗?如何快速解决常见问题,恢复顺畅体验!,ai13212511845
撰写稿子的AI,写作的“超级助手”来了!
用AI写文章:效率与创意的完美结合
文章AI生成:让创作变得更简单、更高效!
SEO指:如何通过精准优化提高网站流量和转化率,无锡论坛营销推广要多久
SEO出来,打破流量瓶颈,助力企业增长的关键策略,南昌营销推广代理商电话
文章AI扩写:突破创作瓶颈,提升写作效率的秘密武器
SEO快排还有效果吗揭秘快速排名的真相与未来趋势,ai人像波普
二次创作的魅力与潜力:创意无限的数字时代,天长外贸网站建设
为什么要监控SEO效果,国家为什么要监控个人 ,抚顺ai系统
seo跟sem是什么,seo和sem的概念 ,惠威的ai功能
用AI写文章查重率高吗?揭秘AI写作与查重检测的关系
什么是seo方法,何为seo ,ai写作神器源码是什么
用AI写文,开启创作新时代
ChatGPT不能打开EL?揭秘这一困扰背后的真相与解决方案,ai被动房
产品经理seo是什么,产品经理seo是什么意思 ,ai政府公文写作 软件
SEO优化流程:助力网站快速提升排名的关键策略,1745ai
SEO调整,助力网站流量爆发式增长!,江都seo优化排名
AI一键生成文章在线:提升创作效率,改变写作方式
ChatGPT-深度学习与自然语言处理的革命性突破,金华ai视觉锁螺丝机