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对象的三个方法小结
Jan 12 Javascript
在ASP.NET中使用JavaScript脚本的方法
Nov 12 Javascript
百度地图API之本地搜索与范围搜索
Jul 30 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
May 03 Javascript
jQuery Ajax请求后台数据并在前台接收
Dec 10 Javascript
bootstrap下拉菜单使用方法解析
Jan 13 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
Feb 04 Javascript
vue使用监听实现全选反选功能
Jul 06 Javascript
layui table 参数设置方法
Aug 14 Javascript
vue elementUI 表单校验功能之数组多层嵌套
Jun 04 Javascript
vue递归组件实战之简单树形控件实例代码
Aug 27 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
May 09 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中浮点数计算比较及取整不准确的解决方法
2015/01/09 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
浅谈Javascript事件模拟
2012/06/27 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
JS实现汉字与Unicode码相互转换的方法详解
2017/04/28 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
Python遍历numpy数组的实例
2018/04/04 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
python缩进长度是否统一
2020/08/02 Python
Python实现自动装机功能案例分析
2020/10/22 Python
python动态规划算法实例详解
2020/11/22 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
数据库连接池的工作原理
2012/09/26 面试题
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
高中数学教师求职信
2013/10/30 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
2015年考研复习计划
2015/01/19 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
2015社区爱国卫生工作总结
2015/04/21 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
Python Pandas pandas.read_sql函数实例用法
2021/06/21 Python
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL