Knockout: 使用knockout validation插件進行校驗, 給未通過校驗的輸入框添加紅色邊框突出顯示.


之前整理了三篇帖子:

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插件也支持寫自定義的校驗函數,擴展性非常好,因此,值得推薦使用!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM