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 相关文章推荐
图片之间的切换
Jun 26 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
Dec 30 Javascript
node.js中的console.info方法使用说明
Dec 09 Javascript
JavaScript DOM元素尺寸和位置
Apr 13 Javascript
jquery ztree实现树的搜索功能
Feb 25 Javascript
Vue2实现组件props双向绑定
Dec 02 Javascript
jQuery实现拖动效果的实例代码
Jun 25 jQuery
javascript trie前缀树的示例
Jan 29 Javascript
Vue 父子组件的数据传递、修改和更新方法
Mar 01 Javascript
Django模板继承 extend标签实例代码详解
May 16 Javascript
node实现简单的增删改查接口实例代码
Aug 22 Javascript
Layui数据表格之单元格编辑方式
Oct 26 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
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
2013/07/01 PHP
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
javascript测试题练习代码
2012/10/10 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
python执行外部程序的常用方法小结
2015/03/21 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
python 性能优化方法小结
2017/03/31 Python
python九九乘法表的实例
2017/09/26 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
Python chardet库识别编码原理解析
2020/02/18 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
社团活动策划书范文
2014/01/09 职场文书
酒店销售经理岗位职责
2014/01/31 职场文书