Knockout: 使用CSS绑定和event的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示.
目的:使用knockout提供的机制实现输入框失去焦点后的校验工作,并使用CSS绑定给未通过校验的输入框添加红色边框突出显示.
步骤: 先在htm中添加.error的css样式, 并在输入框中的data-bind属性中添加 event: {blur: ChecktFirstNameIsValid},和css: { error: !firstNameIsValid()}, 然后再在ViewModel中在firstName监控属性后面再添加一个firstNameIsValid布尔型监控属性, 并给ViewModel添加一个ChecktFirstNameIsValid函数, 在这里检查输入框中的值是否符合校验规则, 如果不通过, 就把firstNameIsValid设置为false, 这样, 输入框就有了红色边框, 如果输入正确, 则把firstNameIsValid设置为true, 这样, 输入框的红色边框就消失了.
1.htm
<!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.js
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.截图

4.总结
综合前两文:
Knockout: 实践CSS绑定和jQuery的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示. http://www.cnblogs.com/liuzhendong/p/3595949.html
Knockout: 实践CSS绑定和afterkeydown事件, 给未通过校验的输入框添加红色边框突出显示; 使用afterkeydown事件自动将输入转大写字母. http://www.cnblogs.com/liuzhendong/p/3595845.html
可以看到,使用Jquery的blur事件,使用原生Javascript中的onblur事件,以及使用ko中的event: {blur: ChecktFirstNameIsValid},都可以完成这个工作.
不过如果使用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");
}
Knockout: 使用CSS绑定和event的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示.的更多相关文章
- Knockout: 实践CSS绑定和jQuery的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示.
		
目的: 实践一下Knockout提供的CSS绑定功能和JQuery的blur失去焦点事件, 这次不使用Knockout的afterkeydown事件了. 步骤: 先在htm中添加.error的css样 ...
 - Knockout: 使用knockout validation插件进行校验, 给未通过校验的输入框添加红色边框突出显示.
		
之前整理了三篇帖子: Knockout: 使用CSS绑定和event的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示. http://www.cnblogs.com/liuzhend ...
 - Knockout: 实践CSS绑定和afterkeydown事件, 给未通过校验的输入框添加红色边框突出显示; 使用afterkeydown事件自动将输入转大写字母.
		
目的: 实践一下Knockout提供的CSS绑定功能和afterkeydown事件. 步骤: 先在htm中添加.error的css样式, 并在输入框中绑定css: { error: !firstNam ...
 - Knockout.js CSS绑定
		
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...
 - input中blur失去焦点事件与点击事件冲突时如何解决
		
方法一 使用setTimeout $(function(){ $(".cy-name-input input").on({ focus:function() { $(". ...
 - 通过CSS禁止Chrome自动为输入框添加橘黄色边框,修改/禁止 chrome input边框颜色,
		
1 /*Chrome浏览器 点击input 黄色边框 禁用*/ .NoOutLine:focus{outline: none} <asp:TextBox ID="txtTeleph ...
 - Knockout.Js官网学习(html绑定、css绑定)
		
Html绑定 html绑定到DOM元素上,使得该元素显示的HTML值为你绑定的参数.如果在你的view model里声明HTML标记并且render的话,那非常有用. 简单示例 <div dat ...
 - Knockout v3.4.0 中文版教程-13-控制文本内容和外观-css绑定
		
4. css绑定 目的 css绑定可以给关联的DOM元素添加或移除一个或多个CSS类.该绑定很有用,比如,当一些值为负数时高亮这些值为红色. (注意:如果你不想使用一个CSS类选择器来附加样式而想直接 ...
 - KnockoutJS 3.X API 第四章 表单绑定(7) event绑定
		
目的 event绑定即为事件绑定,即当触发相关DOM事件的时候回调函数.例如keypress,mouseover或者mouseout等 例如: Mouse over me Details var vi ...
 
随机推荐
- Lanczos Algorithm and it's Parallelization Stragegy
			
由于写了降维的一个系列算法分析,本来以为对这个Lanczos算法会理解一点,但是还是不知道讲了什么,最多的就是会如何调用,然后出结果,所以就翻译官网的相关内容.本篇翻译来自Dimensional Re ...
 - percona-Toolkit
			
1:下载最新安装包 wget https://www.percona.com/downloads/percona-toolkit/2.1.1/percona-toolkit-2.1.1.tar.gz ...
 - Ajax实现文件上传的临时垃圾文件回收策略
			
转载请注明原文出处:http://www.cnblogs.com/ygj0930/p/6126240.html 在我们web开发过程中,一个很重要的技术就是Ajax(异步传输).Ajax通过把数据从网 ...
 - 通过 Apache Commons HttpClient 发送 HTTPS 请求
			
1.通过 HTTPS 发送 POST 请求: 2.HTTPS 安全协议采用 TLSv1.2: 3. 使用代理(Proxy)进行 HTTPS 访问: 4.指定 Content-Type 为:applic ...
 - jqPlot图表插件学习之数据节点高亮和光标提示
			
一.准备工作 首先我们需要到官网下载所需的文件: 官网下载(笔者选择的是jquery.jqplot.1.0.8r1250.zip这个版本) 然后读者需要根据自己的情况新建一个项目并且按照如下的方式加载 ...
 - Adobe After Effects CS6 操作记录
			
安装 After Effects CS6 在Mac OS 10.12.5 上无法直接安装, 需要浏览到安装的执行文件后才能进行 https://helpx.adobe.com/creative-clo ...
 - 微信小程序组件
 - 常用Raspberry Pi周边传感器的使用教程(转)
			
转:http://bbs.xiaomi.cn/thread-7797152-1-1.html 在Raspberry Pi 的使用和开发过程中,你可能时常需要一些硬件和传感器等来支持你的开发工作,例如, ...
 - Lua初学
			
Lua很火啊,而且跟C,c++可以无缝结合,表示很给力,算是我的第三门语言吧,哈哈! 在官网上下载了源码了,和windows版的,表示编译器也很给力,直接可以用SciTE就可以写代码了. a = 1; ...
 - DPDK架构与特点(转)
			
from:http://www.cnblogs.com/mylinuxer/p/4277676.html DPDK架构与特点 当年在某公司实习的时候,当时老大给了我一份DPDK的文档,说是将来很有用, ...