KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定


Posted in Javascript onOctober 11, 2016

textInput绑定目的

textInput绑定主要用于<input>或者<textarea>元素。他提供了DOM和viewmodel的双向更新。不同于value绑定,textinput绑定是实时更新的。

例如:

KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定

源码:

<p>Login name: <input data-bind="textInput: userName" /></p>
<p>Password: <input type="password" data-bind="textInput: userPassword" /></p>

ViewModel:

<pre data-bind="text: ko.toJSON($root, null, 2)"></pre>
<script>
ko.applyBindings({
userName: ko.observable(""), // Initially blank
userPassword: ko.observable("abc") // Prepopulate
});
</script>

备注1:textInput绑定 VS value绑定

虽然value结合也可以进行双向文本框和视图模型性能的结合,但是博主更喜欢textInput,因为他是实时更新的。value绑定与textInput绑定的主要的区别在于:

即时更新

value默认情况下,只有当用户将焦点从文本框移开后才会更新您的模型。textInput每次击键或其他文本输入时立刻更新模型。

浏览器的事件处理

不同的浏览器有着文本输入机制,如剪切,拖动,或接受自动完成建议的事件在不同的浏览器中机制是不一致。value绑定,有额外的选项,如valueUpdate: afterkeydown获得对特定事件的更新,但是有可能不兼容所有的浏览器。

textInput结合是专门用来处理各种浏览器的不同机制,即使在应对不同的文字输入机制也能保持一致和直接更新模型。

不要尝试使用value和textInput在相同的元素上进行绑定。

hasFocus绑定目的

hasFocus绑定是视图模型属性与DOM元素的焦点状态绑定。它是一个双向绑定,所以:

如果您的视图模型属性设置为true或者false,相关的元素将成为聚焦的或未聚焦。
如果用户手动对焦或unfocuses相关元件,所述视图模型属性将被设置为true或false相应。
如果您正在构建中,编辑元素动态显示复杂的形式,你想控制,用户应该开始打字,或插入符的响应位置,这是非常有用的。

示例1

这个例子中当文本框当前具有焦点时则显示消息,并可以使用一个按钮通过编程方式触发焦点。

KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定

源码:

<input data-bind="hasFocus: isSelected">
<button data-bind="click: setIsSelected">Focus programmatically</button>
<span data-bind="visible: isSelected">The textbox has focus</span> 
<script>
var viewModel = {
isSelected: ko.observable(false),
setIsSelected: function() { this.isSelected(true) }
};
ko.applyBindings(viewModel,document.getElementById("eq2"));
</script>

示例2

因为hasFocus绑定是双向绑定,这可以使切换的“编辑”模式更加便捷。

KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定

源码:

<p>
Name: 
<b data-bind="visible: !editing(), text: name, click: edit"> </b>
<input data-bind="visible: editing, value: name, hasFocus: editing" />
</p>
<p><em>Click the name to edit it; click elsewhere to apply changes.</em></p>
<script>
function PersonViewModel(name) {
// Data
this.name = ko.observable(name);
this.editing = ko.observable(false);
// Behaviors
this.edit = function() { this.editing(true) }
}
ko.applyBindings(new PersonViewModel("Bert Bertington"),document.getElementById("eq3"));
</script>

checked绑定目的

checked绑定主要用于复选框(<input type='checkbox'>)或单选按钮(<input type='radio'>) 并与视图模型属性进行绑定。

当用户更改了表单控件,这将更新您的视图模型属性的值。同样,当您更新您的视图模型的值,也将直接反映到表单控件上。

注意:对于文本框,下拉列表,以及所有以非可勾选表单控件,需要使用value绑定或者textInput绑定读写元素的值,而不是checked绑定。

示例1:复选框绑定

KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定

源码:

<p>Send me spam: <input type="checkbox" data-bind="checked: wantsSpam" /></p>
<script type="text/javascript">
var viewModel = {
wantsSpam: ko.observable(true) // Initially checked
};
// ... then later ...
viewModel.wantsSpam(false); // The checkbox becomes unchecked
</script>

示例2:多复选框附带数组绑定

KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定

源码:

<p>Send me spam: <input type="checkbox" data-bind="checked: wantsSpam" /></p>
<div data-bind="visible: wantsSpam">
Preferred flavors of spam:
<div><input type="checkbox" value="cherry" data-bind="checked: spamFlavors" /> Cherry</div>
<div><input type="checkbox" value="almond" data-bind="checked: spamFlavors" /> Almond</div>
<div><input type="checkbox" value="msg" data-bind="checked: spamFlavors" /> Monosodium Glutamate</div>
</div>
<script type="text/javascript">
var viewModel = {
wantsSpam: ko.observable(true),
spamFlavors: ko.observableArray(["cherry","almond"]) // Initially checks the Cherry and Almond checkboxes
};
// ... then later ...
viewModel.spamFlavors.push("msg"); // Now additionally checks the Monosodium Glutamate checkbox
</script>

示例3:单选按钮

KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定

源码:

<p>Send me spam: <input type="checkbox" data-bind="checked: wantsSpam" /></p>
<div data-bind="visible: wantsSpam">
Preferred flavor of spam:
<div><input type="radio" name="flavorGroup" value="cherry" data-bind="checked: spamFlavor" /> Cherry</div>
<div><input type="radio" name="flavorGroup" value="almond" data-bind="checked: spamFlavor" /> Almond</div>
<div><input type="radio" name="flavorGroup" value="msg" data-bind="checked: spamFlavor" /> Monosodium Glutamate</div>
</div>
<script type="text/javascript">
var viewModel = {
wantsSpam: ko.observable(true),
spamFlavor: ko.observable("almond") // Initially selects only the Almond radio button
};
// ... then later ...
viewModel.spamFlavor("msg"); // Now only Monosodium Glutamate is checked
</script>

参数

主要技术参数

KO设置元素的选中状态,以配合您的参数值。任何以前选中的状态将被覆盖。您的参数被解释的方式取决于你绑定元素是什么类型:

对于复选框,当参数值true时KO将设置为元素为选中状态,当它为false则为未选中状态。如果你给定的不是一个布尔值,KO会松散地解释。这意味着,非零数字和非null对象和非空字符串都将被解释为true,而零,null,undefined,和空字符串将被解释为false。

当用户选中或取消选中该复选框,将KO你的模型属性设置为true或false。

如果你的参数解析为一个被给予array数组。在这种情况下,KO将设置检查DOM中value属性是否与数组值匹配,如果值匹配则被选中,如果不匹配则不勾选。

当用户选中或取消选中该复选框,将KO更改对应视图模型属性的值。就像示例2一样。

对于单选按钮,KO将检查视图模型的值是否等于单选按钮DOM节点的value属性或检查视图模型属性值是否等于checkedValue参数指定的值。就像示例3一样。

当选择了用户改变其单选按钮,KO会设置模型属性值为选定的单选按钮的值。像示例3中,点击value="cherry"的单选按钮后将设置viewModel.spamFlavor为"cherry"。

如果你的参数是监控属性类型,每当值改变绑定将更新元素的选中状态。如果该参数是非监控属性,它只会在首次运行时设置元素的选中状态,以后再不会更新。

其他参数

checkedValue

checkedValue参数定义了使用值与checked绑定结合,而不是元素的value属性。如果你想要的值是一个字符串(如整数或对象)以外的东西,或者你想动态设置的值,这非常有用。

例如下边的例子:

KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定

源码:

<!-- ko foreach: items -->
<input type="checkbox" data-bind="checkedValue: $data, checked: $root.chosenItems" />
<span data-bind="text: itemName"></span>
<!-- /ko -->
<script type="text/javascript">
var viewModel = {
items: ko.observableArray([
{ itemName: 'Choice 1' },
{ itemName: 'Choice 2' }
]),
chosenItems: ko.observableArray()
};
</script>

如果你的checkedValue参数是一个监控属性,当值的变化和元素是否被选中,绑定将更新checked模型属性。对于复选框,它会从数组删除旧值并添加新的价值。对于单选按钮,它只会更新模型值。

以上所述是小编给大家介绍的KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript数组组合成字符串的脚本
Jan 06 Javascript
jQuery列表拖动排列具体实现
Nov 04 Javascript
js返回上一页并刷新的多种实现方法
Feb 26 Javascript
Js保留小数点的4种效果实现代码分享
Apr 12 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
Jun 30 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
Sep 09 Javascript
AngularJS中transclude用法详解
Nov 03 Javascript
js实现数组去重方法及效率?Ρ? target=
Feb 14 Javascript
详解Node.js开发中的express-session
May 19 Javascript
JS仿淘宝搜索框用户输入事件的实现
Jun 19 Javascript
jQuery实现拼图小游戏(实例讲解)
Jul 24 jQuery
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
JavaScript获取URL中参数querystring的方法详解
Oct 11 #Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
Oct 11 #Javascript
Node.js的环境安装配置(使用nvm方式)
Oct 11 #Javascript
javascript 动态样式添加的简单实现
Oct 11 #Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 #Javascript
javascript 动态脚本添加的简单方法
Oct 11 #Javascript
js HTML5上传示例代码完整版
Oct 10 #Javascript
You might like
用PHP制作静态网站的模板框架(四)
2006/10/09 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
2014/11/25 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
原生js实现分页效果
2020/09/23 Javascript
python轻松实现代码编码格式转换
2015/03/26 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
自动化专业个人求职信范文
2013/11/29 职场文书
追悼会子女答谢词
2014/01/28 职场文书
党员干部承诺书范文
2014/03/25 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
学习十八大的心得体会
2014/09/12 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
护理工作个人总结
2015/03/03 职场文书
晚会开场白和结束语
2015/05/29 职场文书
小学运动会通讯稿
2015/07/18 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js
Python pyecharts绘制条形图详解
2022/04/02 Python