KnockoutJS 3.X API 第四章之事件event绑定


Posted in Javascript onOctober 10, 2016

目的

event绑定即为事件绑定,即当触发相关DOM事件的时候回调函数。例如keypress,mouseover或者mouseout等

例如:

Mouse over me

源码:

<div>
<div data-bind="event: { mouseover: enableDetails, mouseout: disableDetails }">
Mouse over me
</div>
<div data-bind="visible: detailsEnabled">
Details
</div>
</div>
<script type="text/javascript">
var viewModel = {
detailsEnabled: ko.observable(false),
enableDetails: function() {
this.detailsEnabled(true);
},
disableDetails: function() {
this.detailsEnabled(false);
}
};
ko.applyBindings(viewModel);
</script>

如上述例子,当鼠标指针移入或者移出Mouse over me时,对于detailsEnabled的值设定true或者false。进而控制Details的显示和隐藏。

和click一样,event后边所跟的格式一般为:event { mouseover: someObject.someFunction },其中的回调函数并不一定非要是视图模型的函数,他可以时任何对象的函数。

备注1:传递一个当前项目作为参数

London
Paris
Tokyo
You seem to be interested in:

源码:

<ul data-bind="foreach: places">
<li data-bind="text: $data, event: { mouseover: $parent.logMouseOver }"> </li>
</ul>
<p>You seem to be interested in: <span data-bind="text: lastInterest"> </span></p>
<script type="text/javascript">
function MyViewModel() {
var self = this;
self.lastInterest = ko.observable();
self.places = ko.observableArray(['London', 'Paris', 'Tokyo']);

// The current item will be passed as the first parameter, so we know which place was hovered over
self.logMouseOver = function(place) {
self.lastInterest(place);
}
}
ko.applyBindings(new MyViewModel());
</script>

需要注意,如果你使用的是嵌套绑定上下文,比如foreach或者with,而需要处理的回调函数在视图模型中或者在父模型中,需要使用$parent或者$root前缀来进行绑定

与click绑定一样,给this取个别名比较好。

备注2:传递多个参数

此处请参考click绑定:

<div data-bind="event: { mouseover: myFunction }">
Mouse over me
</div>
<script type="text/javascript">
var viewModel = {
myFunction: function(data, event) {
if (event.shiftKey) {
//do something different when user has shift key down
} else {
//do normal action
}
}
};
ko.applyBindings(viewModel);
</script>

封装多参数示例:

<div data-bind="event: { mouseover: function(data, event) { myFunction('param1', 'param2', data, event) } }">
Mouse over me
</div>

使用bind函数示例:

<button data-bind="event: { mouseover: myFunction.bind($data, 'param1', 'param2') }">
Click me
</button>

备注3:允许默认动作

同click绑定一样,ko禁止默认动作,比如你将event的keypress事件绑定到一个Input元素上,那这个input元素输入的值将会被keypress回调占用而无法输入任何信息。解决方案很简单,就是在回调函数中返回true即可。

备注4:防止冒泡事件

如果要防止冒泡事件,可以直接在事件绑定后附加一个youreventBubble绑定。将该附加绑定设置为false则禁止冒泡事件的发生,例如:

<div data-bind="event: { mouseover: myDivHandler }">
<button data-bind="event: { mouseover: myButtonHandler }, mouseoverBubble: false">
Click me
</button>
</div>

备注5:Jquery互动

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

Javascript 相关文章推荐
javascript 图片上传预览-兼容标准
Jun 01 Javascript
javascript cookies 设置、读取、删除实例代码
Apr 12 Javascript
深入分析JQuery和JavaScript的异同
Oct 23 Javascript
js实现仿阿里巴巴城市选择框效果实例
Jun 24 Javascript
Javascript中神奇的this
Jan 20 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
Jun 26 Javascript
微信小程序“摇一摇”的实例代码
Jul 20 Javascript
简单谈谈vue的过渡动画(推荐)
Oct 11 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
Dec 26 Javascript
React Native中NavigatorIOS组件的简单使用详解
Jan 27 Javascript
JavaScript动态添加数据到表单并提交的几种方式
Jun 26 Javascript
帮你提高开发效率的JavaScript20个技巧
Jun 18 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
Oct 10 #Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
Oct 10 #Javascript
KnockoutJS 3.X API 第四章之表单value绑定
Oct 10 #Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
Oct 10 #Javascript
浅谈jquery中使用canvas的问题
Oct 10 #Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
Oct 10 #Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 #Javascript
You might like
PHP 编写的 25个游戏脚本
2009/05/11 PHP
linux下编译安装memcached服务
2014/08/03 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
测试你的JS的掌握程度的代码
2009/12/09 Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
Javascript实现运算符重载详解
2018/04/07 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
layui 表单标签的校验方法
2019/09/04 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
Python的pycurl包用法简介
2015/11/13 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
Html5页面二次分享的实现
2018/07/30 HTML / CSS
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
小学中秋节活动方案
2014/02/06 职场文书
春节请假条
2014/04/11 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
银行服务理念口号
2015/12/25 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书