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 相关文章推荐
Jquery实现的tab效果可以指定默认显示第几页
Oct 16 Javascript
浅析JavaScript中的typeof运算符
Nov 30 Javascript
node.js中的console.timeEnd方法使用说明
Dec 09 Javascript
bootstrap select插件封装成Vue2.0组件
Apr 17 Javascript
详解如何实现一个简单的Node.js脚手架
Dec 04 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
Feb 27 Javascript
Javascript读写cookie的实例源码
Mar 16 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
Apr 17 Javascript
vue点击按钮动态创建与删除组件功能
Dec 29 Javascript
JavaScript事件委托实现原理及优点进行
Aug 29 Javascript
使用js原生实现年份轮播选择效果实例
Jan 12 Javascript
如何使用CocosCreator对象池
Apr 14 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
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
基于jquery的loading效果实现代码
2010/11/05 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
python使用scrapy解析js示例
2014/01/23 Python
Python创建模块及模块导入的方法
2015/05/27 Python
玩转python爬虫之URLError异常处理
2016/02/17 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
巴西宠物商店:Cobasi
2019/04/19 全球购物
英语专业个人求职信范文
2014/02/01 职场文书
青蓝工程实施方案
2014/03/27 职场文书
面试自我评价范文
2014/09/17 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
道歉情书大全
2015/05/12 职场文书
决心书格式范文
2015/09/23 职场文书
聘任书的格式及模板
2019/10/28 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
如何正确理解python装饰器
2021/06/15 Python