jQuery 事件的命名空间简单了解


Posted in Javascript onNovember 22, 2013

用 jQuery 绑定和解绑事件监听器都是非常简单的。但是当你为一个元素的一个事件绑定了多个监听器时,怎样精确地解绑其中一个监听器?我们需要了解一下事件的命名空间。

看下面这段代码:

$('#element') 
.on('click', doSomething) 
.on('click', doSomethingElse);

像上面这样绑定事件监听器,当元素被点击时,doSomething 和 doSomethingElse 这两个监听器都会被触发。这是使用 jQuery 的一个便利之处,可以随时给元素的同一个事件添加不同的监听器。不像用 onclick 那样,新的监听器会覆盖旧的。

如果你想解绑其中一个监听器,比如 doSomething,怎么做呢?

是这样吗?

$('#element').off('click');

注意!上面这行代码会把元素的 click 事件的所有监听器全部解绑,而这并不是我们要的结果。

幸运的是 jQuery 的 .off() 方法可以接受第二个参数,就像 .on() 一样。只要把监听器函数的名字作为第二个参数传入 .off() 方法,就能够解绑指定的监听器。

$('#element').off('click', doSomething);

但是如果你不知道这个函数的名字,或者你用的是匿名函数:
$('#element').on('click', function() { 
console.log('doSomething'); 
});

怎样才能精确地解绑某一个 click 事件监听器呢?
先上代码:
$('#element').on('click.myNamespace', function() { 
console.log('doSomething'); 
});

这里不只是把 click 事件作为参数传入 .on() 方法,而是给 click 事件指定了一个命名空间,然后监听了这个命名空间里的 click 事件。此时,即使监听器是匿名函数,实际上它也是 “ 有名 ” 的了。现在你可以像下面这样解绑某一个具体的命名空间里的事件监听器了。
$('#element').off('click.myNamespace');

这是 jQuery 为我们提供的又一个方便而强大的功能,它的内部实现肯定很有意思!
Javascript 相关文章推荐
javascript 延迟加载技术(lazyload)简单实现
Jan 17 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
使用JS画图之点、线、面
Jan 12 Javascript
JavaScript实现基于Cookie的存储类实例
Apr 10 Javascript
JavaScript 面向对象与原型
Apr 10 Javascript
js实现延迟加载的方法
Jun 24 Javascript
基于AngularJS+HTML+Groovy实现登录功能
Feb 17 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
Aug 31 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
Aug 17 Javascript
解决在vue项目中webpack打包后字体不生效的问题
Sep 01 Javascript
jquery多级树形下拉菜单的实例代码
Jul 09 jQuery
vue路由缓存的几种实现方式小结
Feb 02 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
Nov 22 #Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
Nov 22 #Javascript
用正则表达式替换图片地址img标签
Nov 22 #Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
Nov 22 #Javascript
jquery ajax中使用jsonp的限制解决方法
Nov 22 #Javascript
javascript禁用Tab键脚本实例
Nov 22 #Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
Nov 22 #Javascript
You might like
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
Extjs学习笔记之七 布局
2010/01/08 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
JS写的贪吃蛇游戏(个人练习)
2013/07/08 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
python模拟enum枚举类型的方法小结
2015/04/30 Python
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
django admin组件使用方法详解
2019/07/19 Python
python3实现微型的web服务器
2019/09/03 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
参观接待方案
2014/03/17 职场文书
校园文明标语
2014/06/13 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
童年读书笔记
2015/06/26 职场文书