之前整理了三篇帖子:
Knockout: 使用CSS綁定和event的blur失去焦點事件, 給未通過校驗的輸入框添加紅色邊框突出顯示. http://www.cnblogs.com/liuzhendong/p/3596267.html
Knockout: 實踐CSS綁定和jQuery的blur失去焦點事件, 給未通過校驗的輸入框添加紅色邊框突出顯示. http://www.cnblogs.com/liuzhendong/p/3595949.html
Knockout: 實踐CSS綁定和afterkeydown事件, 給未通過校驗的輸入框添加紅色邊框突出顯示; 使用afterkeydown事件自動將輸入轉大寫字母. http://www.cnblogs.com/liuzhendong/p/3595845.html
這三篇講述的都是同一個主題, 雖然分別用了不同的技術實現, 但大方向都是自己寫校驗程序的, 今天使用knockout validation插件來做同樣的校驗工作, 正好可以比較一下可以節省多少代碼!
首先要去https://github.com/Knockout-Contrib/Knockout-Validation下載knockout.validation.js, 然后引入自己的代碼, 具體如下:
1.htm
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="Lib/require/require.js" data-main="JsDemo5_Main"></script>
<style type="text/css">
.error {
border: 2px solid red;
}
input {
border: 1px solid #AAA;
padding: 4px;
}
</style>
</head>
<body>
<input id="txtFirstName" type="text" data-bind="value:firstName, validationElement: firstName" /><br />
<input id="txtLastName" type="text" data-bind="value:lastName, validationElement: lastName" /><br />
<input id="txtScore" type="text" data-bind="value:score, validationElement: score" /><br />
<button id="btn" data-bind="click:SubmitClick" >btn</button>
<br /><br />
<!--顯示錯誤提示信息 start-->
<font color="red">
<b>
<span data-bind="validationMessage: firstName"></span>
<span data-bind="validationMessage: lastName"></span>
<span data-bind="validationMessage: score"></span>
</b>
</font>
<!--顯示錯誤提示信息 end-->
</body>
</html>
2.JsDemo5_Main.js
require.config({
paths: {
"knockout": "Lib/knockout/knockout-2.3.0",
"jquery": "Lib/jquery/jquery-1.9.1.min",
"knockvalidation": "Lib/knockout/knockout.validation"
}
});
require(['knockout', 'jquery','knockvalidation'], function ( ko, $, kovalidation) {
//數據綁定
ko.validation.configure({
decorateElement: false,
registerExtenders: true,
messagesOnModified: true,
insertMessages: false,
parseInputAttributes: true,
messageTemplate: null,
errorClass : 'error'
});
var viewModel = {
firstName: ko.observable().extend({ required: { message: '請輸入firstName' } }),
lastName: ko.observable().extend({ required: { message: '請輸入lastName' } }).extend({ minLength: 2, maxLength: 10 }),
score: ko.observable().extend({
validation: {
validator: function (val, someOtherVal) {
if (val != null && val.length >= someOtherVal)
{
return true;
}
else
{
return false;
}
},
message: '最少要輸入6位數字',
params: 6
}
}),
SubmitClick: function () {
if (viewModel.errors().length == 0) {
//可以提交數據了.
alert("ok");
return true;
} else {
alert("fail");
viewModel.errors.showAllMessages();
return false;
}
}
};
viewModel.errors = ko.validation.group(viewModel);
$(document).ready(function () {
ko.applyBindings(viewModel);
});
});
3.截圖

4.總結
使用了knockout.validation插件,確實大大節省了代碼量,而且knockout.validation插件也支持寫自定義的校驗函數,擴展性非常好,因此,值得推薦使用!
