Knockout: 使用CSS綁定和event的blur失去焦點事件, 給未經過校驗的輸入框添加紅色邊框突出顯示.

目的:使用knockout提供的機制實現輸入框失去焦點後的校驗工做,並使用CSS綁定給未經過校驗的輸入框添加紅色邊框突出顯示.javascript

步驟: 先在htm中添加.error的css樣式, 並在輸入框中的data-bind屬性中添加 event: {blur: ChecktFirstNameIsValid},和css: { error: !firstNameIsValid()}, 而後再在ViewModel中在firstName監控屬性後面再添加一個firstNameIsValid布爾型監控屬性, 並給ViewModel添加一個ChecktFirstNameIsValid函數, 在這裏檢查輸入框中的值是否符合校驗規則, 若是不經過, 就把firstNameIsValid設置爲false, 這樣, 輸入框就有了紅色邊框, 若是輸入正確, 則把firstNameIsValid設置爲true, 這樣, 輸入框的紅色邊框就消失了.css


1.htmhtml

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
     <script src="Lib/require/require.js" data-main="JsDemo2_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, css: { error: !firstNameIsValid()}, event: {blur: ChecktFirstNameIsValid}" />
    <input id="txtLastName" type="text" data-bind="value:lastName, css: { error: !lastNameIsValid()}, event: {blur: ChecktLastNameIsValid}" />
    <button id="btn" data-bind="click:SubmitClick" >btn</button>
    <br /><br />
    <!--顯示錯誤提示信息 start-->
    <font color="red">
    <b>
        <div id="ErrorMessage"></div>
    </b>
    </font>               
    <!--顯示錯誤提示信息 end-->
</body>
</html>

  

2.JsDemo2_Main.jsjava

require.config({
    paths: {
        "knockout": "Lib/knockout/knockout-2.3.0",
        "jquery": "Lib/jquery/jquery-1.9.1.min"
    }
});

require(['knockout', 'jquery'], function ( ko, $) {
    //數據綁定
    var viewModel = {
        firstName: ko.observable(""),
        firstNameIsValid: ko.observable(true),
        firstNameInValidMessage: ko.observable(),
        lastName: ko.observable(""),
        lastNameIsValid: ko.observable(true),
        lastNameInValidMessage: ko.observable(),
        AllErrorMessage: ko.observable(),
        SubmitClick: function () {
            viewModel.ChecktFirstNameIsValid();
            viewModel.ChecktLastNameIsValid();
            if (viewModel.AllErrorMessage().length > 0) {               
                alert("fail");
                return false;
            }
            else {
                alert("ok");
                return true;
                //能夠提交數據了.
            }
        },
        ChecktFirstNameIsValid: function () {
            if (viewModel.firstName().length <= 10) {
                viewModel.firstNameIsValid(false);
                viewModel.firstNameInValidMessage("firstName請輸入至少10位字符")
            }
            else {
                viewModel.firstNameIsValid(true);
                viewModel.firstNameInValidMessage("")
            }
            viewModel.ShowAllErrorMessage();
        },
        ChecktLastNameIsValid: function () {
            if (viewModel.lastName().length <= 10) {
                viewModel.lastNameIsValid(false);
                viewModel.lastNameInValidMessage("lastName請輸入至少10位字符")
            }
            else {
                viewModel.lastNameIsValid(true);
                viewModel.lastNameInValidMessage("")
            }
            viewModel.ShowAllErrorMessage();
        },       
        ShowAllErrorMessage: function () {
            var message = "";

            if (!viewModel.firstNameIsValid()) {
                message += "\n" + viewModel.firstNameInValidMessage();
            }

            if (!viewModel.lastNameIsValid()) {
                message += "\n" + viewModel.lastNameInValidMessage();
            }

            viewModel.AllErrorMessage(message);

            if (viewModel.AllErrorMessage().length > 0) {
                $("#ErrorMessage").html(message); 
            }
            else {
                $("#ErrorMessage").html("");
            }
        }
    };


    /*document.getElementById("txtFirstName").onblur = function () {
        viewModel.ChecktFirstNameIsValid();
        viewModel.ShowAllErrorMessage();
    }*/

    /*$('#txtFirstName').on('blur', function () {
        viewModel.ChecktFirstNameIsValid();
        viewModel.ShowAllErrorMessage();       
    });*/

    /*$('#txtLastName').on('blur', function () {
        viewModel.ChecktLastNameIsValid();
        viewModel.ShowAllErrorMessage();       
    });*/

    viewModel.afterkeydown = ko.dependentObservable(function () {
        viewModel.firstName(viewModel.firstName().toUpperCase());
        viewModel.lastName(viewModel.lastName().toUpperCase());
    }, viewModel);

    $(document).ready(function () {
        ko.applyBindings(viewModel);
    });

   
});

3.截圖jquery

4.總結app

綜合前兩文:函數

Knockout: 實踐CSS綁定和jQuery的blur失去焦點事件, 給未經過校驗的輸入框添加紅色邊框突出顯示. http://www.cnblogs.com/liuzhendong/p/3595949.htmlui

Knockout: 實踐CSS綁定和afterkeydown事件, 給未經過校驗的輸入框添加紅色邊框突出顯示; 使用afterkeydown事件自動將輸入轉大寫字母. http://www.cnblogs.com/liuzhendong/p/3595845.htmlthis

能夠看到,使用Jquery的blur事件,使用原生Javascript中的onblur事件,以及使用ko中的event: {blur: ChecktFirstNameIsValid},均可以完成這個工做.orm

不過若是使用knockout,仍是使用自己的event方案從代碼風格上更統一一些.

 

5.註釋

LostFocus是WinForm控件的失去焦點事件, 例子以下, 它不能用在htm頁面控件失去焦點時,  在htm中要用onblur或blur纔對.

        public Form2()
        {
            InitializeComponent();
            this.textBox3.LostFocus += textBox3_LostFocus;
        }

        void textBox3_LostFocus(object sender, EventArgs e)
        {
            MessageBox.Show("a");
        }
相關文章
相關標籤/搜索