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 相关文章推荐
实现复选框全选/全不选切换
Dec 23 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
Mar 10 Javascript
js螺旋动画效果的具体实例
Nov 15 Javascript
JS实现div居中示例
Apr 17 Javascript
JS正则表达式比较常见用法
Jan 26 Javascript
JavaScript数组方法大全(推荐)
Jul 05 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 Javascript
解析js如何获取css样式
Dec 11 Javascript
遍历json获得数据的几种方法小结
Jan 21 Javascript
详解webpack2异步加载套路
Sep 14 Javascript
详解在create-react-app使用less与antd按需加载
Dec 06 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
Aug 08 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
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
php支付宝APP支付功能
2020/07/29 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
无阻塞加载脚本分析[全]
2011/01/20 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
vue实现分页组件
2020/06/16 Javascript
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
python list转dict示例分享
2014/01/28 Python
Python转换HTML到Text纯文本的方法
2015/01/15 Python
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
浅谈Python 中整型对象的存储问题
2016/05/16 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
使用python接入微信聊天机器人
2020/03/31 Python
scikit-learn线性回归,多元回归,多项式回归的实现
2019/08/29 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
this关键字的作用
2016/01/30 面试题
电子商务专员岗位职责
2013/12/11 职场文书
中文师范生自荐信
2014/01/30 职场文书
社会实践评语
2014/04/28 职场文书
网络销售员岗位职责
2015/04/11 职场文书
高中家长意见怎么写
2015/06/03 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL