前面的绑定都是用在基本标签上,这章主要讲表单域标签的绑定。

一、value 绑定

  绑定标签:input text、textarea。

    <p>用户名:<input type="text" data-bind="value:name" /><span data-bind="text:name"></span></p>
<p>密码:<input type="text" data-bind="value:password" /><span data-bind="text:password"></span></p>
function UserInfo(){
var self = this;
self.name = ko.observable("tom");
self.password = ko.observable("123456");
}
var userInfo = new UserInfo();
ko.applyBindings(userInfo);

  关于value还有一个参数:valueUpdate,用于设置触发绑定的时机。支持以下值:  

  “change”(默认值) - 当失去焦点的时候更新view model的值,或者是<select> 元素被选择的时候。

“keyup” – 当用户敲完一个字符以后立即更新view model。

“keypress” – 当用户正在敲一个字符但没有释放键盘的时候就立即更新view model。不像 keyup,这个更新和keydown是一样的。

“afterkeydown” – 当用户开始输入字符的时候就更新view model。主要是捕获浏览器的keydown事件或异步handle事件。

上述这些选项,如果你想让你的view model进行实时更新,使用“afterkeydown”是最好的选择。

  例如,我可以将上面的用户名编辑框改为:<input type="text" data-bind="value:name,valueUpdate:'afterKeydown'"/> 这样就可以实时更新了。

二、options 绑定

  绑定标签:select。

  例1:options指定项集。

<select data-bind="options:items"></select>
var items = ["item1","item2","item3"];
ko.applyBindings(items); //添加新项
items.push("item4");

  例2:optionsText:指定要显示的属性的名称;optionsCaption:初始选项;value:被选中的项。

    <select data-bind="options:items,optionsText:'name',optionsCaption:'请选择...',value:selectedValue"></select>
<div data-bind="text:selectedValue() ? selectedValue().name : '未选择'"></div>
var data = {
items:ko.observableArray([{name:"中国",rank:1},{name:"美国",rank:2},{name:"俄罗斯",rank:3}]),
selectedValue:ko.observable()
}
ko.applyBindings(data);

三、selectedOptions 绑定

  绑定标签:multiple select

    <select data-bind="options:items,selectedOptions:selectedItems" multiple="multiple" size="5"></select>
<div data-bind="text:selectedItems().join(',')"></div>
var data = {
items:ko.observableArray(["中国","美国","俄罗斯"]),
selectedItems : ko.observableArray(["中国"])
}
ko.applyBindings(data);

  selectedOptions表示选中的项。selectedOptions不仅可以支持字符串,还可以像options一样支持对象类型。

四、checked 绑定

  绑定标签:radio、checkbox。

  例1,相同checked属性的radio为一个组。

    <input type="radio" value="basketball" data-bind="checked:sport"/>篮球
<input type="radio" value="football" data-bind="checked:sport"/>足球
<input type="radio" value="running" data-bind="checked:sport"/>跑步
<p>您的选择:<span data-bind="text:getSport()"</p>
var data = {
sport:ko.observable("basketball"),
getSport:function(){
switch(data.sport()){
case "basketball":
return "篮球";
case "football":
return "足球";
case "running":
return "跑步";
default:
return "暂无";
}
}
}
ko.applyBindings(data);

  例2:checked可以多选,所以用observableArray。  

    <input type="checkbox" value="basketball" data-bind="checked:sport"/>篮球
<input type="checkbox" value="football" data-bind="checked:sport"/>足球
<input type="checkbox" value="running" data-bind="checked:sport"/>跑步
<p>您的选择:<span data-bind="text:getSport()"</p>
var data = {
sport:ko.observableArray(["basketball","football","running"]),
getSport:function(){
var sports = data.sport();
if(!sports){
return "暂无";
}
return sports.join(",");
}
}
ko.applyBindings(data);

五、enable 绑定/disable 绑定

  根据结果设置input 的 disabled 属性。这两个的作用是一样的。

    <input type="text" data-bind="enable:isEnabled" /><br />
<input type="button" value="Test" data-bind="disable:isDisabled" />

六、hasfocus 绑定

  结果为true时获得焦点。input text用得比较多。

七、click 和 submit 绑定

  绑定点击事件和提交事件。

  例1:函数第一个参数就是事件对象。

    <input type="button" value="click" data-bind="click:btnClick" />
var data = {
btnClick:function(event){
console.log(event);
}
}
ko.applyBindings(data);

  例2:取消事件冒泡,通过绑定 cancelBubble:false 就可以取消事件冒泡。

    <div data-bind="click:btnClick">
<input type="button" value="click" data-bind="click:btnClick,clickBubble:false" />
</div>

  例3:也可以在绑定事件里,传递参数到执行函数,最简单的方式就是用一个匿名函数包装一下。

    <div data-bind="click:btnClick">
<input type="button" value="click" data-bind="click:function(){btnClick('参数1','参数2');}" />
</div>  

  例4:submit 绑定在form标签上,只有绑定函数return ture时,才会提交表单。而为什么表单用submit绑定而不用普通的click绑定?因为表单绑定有更多的操作,例如按下enter键触发提交操作。

    <form action="Default.aspx" data-bind="submit:submitForm">
<input type="text" name="name" />
<input type="submit"/>
</form>
var data = {
submitForm:function(){
return true;
}
}

八、event 绑定

  除了点击事件,ko还支持其它事件的绑定。例如:keypress、mouseover、mouseout等。

    <div style="width:100px;height:100px;background:red;" data-bind="event:{mouseover:divMouseOver,mouseout:divMouseLeave}"></div>
<div data-bind="text:status"></div>
var data = {
divMouseOver:function(event){
this.status("over");
},
divMouseLeave:function(event){
this.status("out");
},
status:ko.observable("未开始")
}
ko.applyBindings(data);

九、总结

  ko不仅支持样式绑定,还支持事件绑定,将数据作为核心,我们只需要关注数据的变化和数据的逻辑操作,这大大提高了我们的开发效率。

knockoutJS学习笔记08:表单域绑定的更多相关文章

  1. vue学习笔记(六)表单输入绑定

    前言 在上一章vue学习笔记(四)事件处理器这一篇博客的内容中,我们已经了解vue是如何绑定事件的,而本篇博客主要讲解的是vue中表单输入的绑定,通常我们自己提交信息的时候都是通过表单将信息到服务器的 ...

  2. Vue.js学习笔记--3.表单输入绑定

    整理自官网教程 -- https://cn.vuejs.org/ 利用v-model可以实现表单元素的value与后台数据的双向绑定,具体用法如下: <!--文本--> <input ...

  3. Vue 学习笔记之 —— 表单输入绑定

    Vue 中文文档 https://cn.vuejs.org/ 不多说,直接上干货. v-model 指定,用来在input textarea 等表单元素上创建双向数据绑定,负责监听用户的输入事件,以及 ...

  4. jQuery学习笔记(5)--表单域获得焦点和失去焦点样式变化

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  5. Vue学习计划基础笔记(五) - 表单输入绑定、组件基础

    表单输入绑定.组件基础 目标: 熟练掌握vue中表单的处理方式 对之前学习的内容简单回顾一下,并写一个实例,学以致用(最好脱离文档) vue中表单的处理方式 vue中表单的处理使用了v-model指令 ...

  6. AngularJS 1.2.x 学习笔记(表单校验篇)

    https://my.oschina.net/cokolin/blog/526911 摘要: 本文首发于 blog.csdn.net/vipshop_ebs/article/details/39472 ...

  7. Bootstrap学习笔记(二) 表单

    在Bootstrap学习笔记(一) 排版的基础上继续学习Bootstrap的表单,编辑器及head内代码不变. 3-1 基础表单 单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文 ...

  8. Symfony2学习笔记之表单

    对于一个Web开发者来说,处理HTML表单是一个最为普通又具挑战的任务.Symfony2集成了一个Form组件,让处理表单变的容易起来.在这一节里,我们将从基础开始创建一个复杂的表单,学习表单类库中最 ...

  9. JS学习笔记7_表单脚本

    1.获取表单及表单元素引用的方式 var mForm = document.forms[formName];获取表单引用 mForm.elements[elemName]获取表单元素,如有同名的,则得 ...

随机推荐

  1. 弄一个ajax笔记方便查询-基础知识篇

    jQuery对Ajax做了大量的封装,jQuery采用了三层封装: 最底层的封装方法为:$.ajax() 通过最底层进一步封装了第二层的三种方法:.load().$.get().$.post() 最高 ...

  2. HTML5 获取地理位置信息

    HTML5增加的新功能,获取地理位置信息,如果浏览器支持且设备有定位功能,就能够直接使用这组API来获取当前信息位置.该Geolocation API可以应用于移动设备中的地理位置. Geolocat ...

  3. js的闭包概念

    一.变量的作用域要懂得闭包,起首必须懂得Javascript特别的变量作用域.变量的作用域无非就是两种:全局变量和局部变量.Javascript说话的特别之处,就在于函数内部可以直接读取全局变量. J ...

  4. html5快速入门(一)—— html简介

    前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...

  5. 详解tintColor属性

    tintColor属性是iOS7之后新加的一个属性,这个属性定义了一个非默认的着色颜色值,其值的设置会影响到以视图为根视图的整个视图层次结构.它主要是改变控件的颜色,以获取一些有意思的视觉效果. ti ...

  6. Play Framework 完整实现一个APP(三)

    1.添加Post类 package models; import java.util.*; import javax.persistence.*; import play.db.jpa.*; @Ent ...

  7. JAVA中的Fork/Join框架

    看了下Java Tutorials中的fork/join章节,整理下. 什么是fork/join框架 fork/join框架是ExecutorService接口的一个实现,可以帮助开发人员充分利用多核 ...

  8. Python基础2

    入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'yuxiaozheng' print name 外层变量,可以被 ...

  9. SQLServer 日期函数大全

    一.统计语句 1.--统计当前[>当天00点以后的数据] ) ) ORDER BY dateandtime DESC 2.--统计本周 3.--统计本月 4.统计当前 SELECT * FROM ...

  10. MongoDB学习笔记~关于官方驱动集成IQueryable之后的一些事

    回到目录 关于官方驱动集成IQueryable之后的一些事,有好事也有坏事,好事就是它会将你的linq语句非常友好的翻译成MongoDB语句,而坏事就是有一些linq语句不会被翻译,不会被翻译的代价就 ...