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 相关文章推荐
select标记美化--JS式插件、后期加载
Apr 01 Javascript
javascript中的parseInt和parseFloat区别
Jul 12 Javascript
使用jQuery时Form表单元素ID和name命名大忌
Mar 06 Javascript
JavaScript原生对象之Date对象的属性和方法详解
Mar 13 Javascript
ES6新特性之Object的变化分析
Mar 31 Javascript
javascript如何用递归写一个简单的树形结构示例
Sep 06 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
Feb 10 Javascript
axios携带cookie配置详解(axios+koa)
Dec 28 Javascript
使用异步controller与jQuery实现卷帘式分页
Jun 18 jQuery
在Angular中实现一个级联效果的下拉框的示例代码
May 20 Javascript
解决新建一个vue项目过程中遇到的问题
Oct 22 Javascript
微信小程序中wxs文件的一些妙用分享
Feb 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
多文件上传的例子
2006/10/09 PHP
php创建多级目录代码
2008/06/05 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
学习YUI.Ext第五日--做拖放Darg&amp;Drop
2007/03/10 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
使用vue-resource进行数据交互的实例
2017/09/02 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
python中随机函数random用法实例
2015/04/30 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
50道外企软件测试面试题
2014/08/18 面试题
高三语文教学反思
2014/01/15 职场文书
电气自动化求职信
2014/06/24 职场文书
2014年村委会工作总结
2014/11/24 职场文书
优秀校长事迹材料
2014/12/24 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
Golang 链表的学习和使用
2022/04/19 Golang
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS