返回目录

对于一个项目的表单验证,方式有很多,效果也有很多,具体使用哪种完成取决于产品这边,产品让你用什么,你就要用什么,而做为开发人员,我们要做的就是"整理近可能多的架构方式",这样才可以自由的应变.

对于表单验证,我今天看了新浪的邮箱注册,觉得效果还可以,所以,就写了一个,它利用了knockoutjs里的hasfocus属性,对文本框进行焦点捕捉来实现的.

新浪截图

说明:表单元素为焦点时,自动提示要输入的信息,当元素失去焦点时,提示用户输出的正确性,这个功能使用了hasfocus属性,下面看一下代码

HTML代码

<div class="editor-label">
账号:
</div>
<div class="editor-field">
<input data-bind='value: name,validationElement:name,hasfocus:selName' />
<span class="validationWarn" data-bind="visible:selName">请输入用户名账号,它由字母汉字数字组成.</span>
<span data-bind="visible:!selName()"><span class="validationError" data-bind="validationMessage:name"></span></span>
<span data-bind="visible:!selName()"><span class="validationSuccess" data-bind="visible:name.isValid()"></span></span>
</div>
<div class="editor-label">
Email:
</div>
<div class="editor-field">
<input data-bind='value: Email,hasfocus:selEmail' />
<span data-bind="visible:!selEmail()"><span class="validationError" data-bind="validationMessage:Email"></span></span>
<span class="validationWarn" data-bind="visible:selEmail">请输入你的Email.</span>
<span data-bind="visible:!selEmail()"><span class="validationSuccess" data-bind="visible:Email.isValid()"></span></span>
</div>
<div class="editor-label">
手机:
</div>
<div class="editor-field">
<input data-bind='value: phone,hasfocus:selPhone' />
<span data-bind="visible:!selPhone()"><span class="validationError" data-bind="validationMessage:phone"></span></span>
<span class="validationWarn" data-bind="visible:selPhone">请输入你的电话.</span>
<span data-bind="visible:!selPhone()"><span class="validationSuccess" data-bind="visible:phone.isValid()"></span></span>
</div>
<div style="clear: both;"></div>
<p>
<input type="button" value="Create" data-bind="click:Register" />
</p>

JS代码

     var Product = function () {
var self = this; ko.validation.configure({//ko.validation相关配置
insertMessages: false,//不自动插入错误消息
errorElementClass: 'errorElementClass',/*元素的CSS样式*/
errorMessageClass: 'errorMessageClass',/*提示信息CSS的样式*/
}); self.name = ko.observable().extend({
minLength: 2,
maxLength: { params: 30, message: "名称最大长度为30个字符" },
required: {
params: true,
message: "请输入名称",
}
});
self.selName = ko.observable(false); self.phone = ko.observable().extend({
required: true,
number: {
params: true,
message: "电话不合法",
}
});
self.selPhone = ko.observable(false); self.Email = ko.observable().extend({
required: {
params: true,
message: "请填写Email"
},
email: {
params: true,
message: "Email格式不正确"
}
});
self.selEmail = ko.observable(false); self.Register = function () {
self.errors = ko.validation.group(self);
if (self.isValid()) {
alert("验证成功,数据可以提交");
} else { self.errors.showAllMessages();
}
};
};
product = new Product();
ko.applyBindings(product);

页面截图

返回目录

最新文章

  1. Java进击C#——语法之知识点的改进
  2. SQL Server里强制参数化的痛苦
  3. 4. 对list进行sort
  4. Android之Activity启动的源码简介
  5. jstl的小问题
  6. C语言 - 大小端问题
  7. 最短路径算法专题2----Dijkstra
  8. android — JNI注册方法说明
  9. (转)Java并发包基石-AQS详解
  10. 【转载】IIS报错不是有效的Win32应用程序
  11. 彻底理解js中的&amp;&amp;和||
  12. CodeForces 719A. Vitya in the Countryside
  13. Linux每天一个命令:nc/ncat
  14. vue中$set的用法
  15. DOM3级的变化
  16. Oracle EBS INV 创建物料搬运单行
  17. linux常用命令:sort 命令
  18. 个人作业1——个人阅读&amp;提问题
  19. 【BZOJ】2049: [Sdoi2008]Cave 洞穴勘测 LCT
  20. xxxservlet继承HttpServlet类

热门文章

  1. selenium隔离环境安装、以及示例
  2. flask_日期和时间
  3. Java学习笔记 04 类和对象
  4. flex进行页面的基础布局
  5. [转]Redis之七种武器
  6. MongoDB学习笔记-01 简介、安装
  7. [Leetcode][JAVA] Insert Interval
  8. JTA 深度历险 - 原理与实现
  9. 【转载】硬盘MBR详细介绍
  10. JavaScript 基础第九天(DOM第三天)