原文地址:http://www.jb51.net/article/43626.htm
 
用 jQuery 绑定和解绑事件监听器都是非常简单的,怎样精确地解绑其中一个监听器?我们需要了解一下事件的命名空间,感兴趣的朋友不要错过
 

用 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 为我们提供的又一个方便而强大的功能,它的内部实现肯定很有意思!

 

jQuery 事件的命名空间简单了解的更多相关文章

  1. jQuery 事件的命名空间

    在没有看到这篇 文章之前,我一直不知道原来bind也可以有命名空间.事实上,我看完这篇文章后,再去翻了一下手册,也才发现了一点点的注释.但手册也仅仅是一句话就带 过去了.没有过多的深究,或许他认为命名 ...

  2. jQuery 事件的命名空间的含义

    对于jquery的on的events解释是 一个或多个空格分隔的事件类型和可选的命名空间,或仅仅是命名空间,比如"click", "keydown.myPlugin&qu ...

  3. JQuery --- 第三期 (jQuery事件相关)

    个人学习笔记 1.JQuery事件绑定 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  4. jQuery的事件绑定命名空间

    jQuery的bind的函数在实际应用中用的不是特别多,只是他可以绑定一个事件,但不会即时触发,也可以通过unbind来解除绑定.在没有看到这篇文章之前,我一直不知道原来bind也可以有命名空间.事实 ...

  5. 浅谈jquery事件命名空间

    什么是jquery的事件命名空间? 先看如下简单代码: $("#btn").on("click.name1.name2",function(){ console ...

  6. jQuery事件绑定、解绑、命名空间

    jQuery事件绑定.解绑.命名空间 <%@ page language="java" import="java.util.*" pageEncoding ...

  7. jQuery事件命名空间多事件绑定自定义事件js 命名空间 javascript命名空间

    http://blog.csdn.net/pigpigpig4587/article/details/24727791 jQuery事件命名空间 jQuery支持事件命名空间,以方便事件管理.例如,在 ...

  8. 解密jQuery事件核心 - 绑定设计(一)

    说起jQuery的事件,不得不提一下Dean Edwards大神 addEvent库,很多流行的类库的基本思想从他那儿借来的 jQuery的事件处理机制吸取了JavaScript专家Dean Edwa ...

  9. 解密jQuery事件核心 - 自定义设计(三)

    接上文http://www.cnblogs.com/aaronjs/p/3447483.html 本文重点:自定义事件 “通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率 ...

随机推荐

  1. Mybatis(四)

    参考网址如下: http://www.cnblogs.com/xdp-gacl/p/4264425.html 向大家推荐 博客园 孤傲苍狼 大哥的博客,东西写的有水平.小弟记录一下自己的学习历程,自勉 ...

  2. python与系统做交互常用的模块和使用方法

    1.使用os模块与系统做简单命令的交互 >>>import os >>>os.popen('pwd') <open file 'pwd', mode 'r' ...

  3. xencenter如何安装系统

    首先点击增加服务器 输入xenserver的ip和用户名以及密码 添加资源池,注意下面那个add new server也要指定一个server,例如刚刚创建的那个 还要搞一个存储的,注意iso要选择s ...

  4. oracle-闪回技术2

    闪回版本查询,用到了附加日志 闪回事务查询 http://blog.csdn.net/laoshangxyc/article/details/12405459 这个博客的备份与恢复可以参考 ##### ...

  5. perventDefault, stopPropagation, stopImmediatePropagation 三者的区别

    event有三种特别容易混淆的方法, 用来阻止默认事件的发生 1.  e.preventDefault(); 2. e.stopPropagation(); 3. e.stopImmediatePro ...

  6. MySQL 学习资料

    MySQL 学习资料: MySQL 学习资料 网址 MySQL 教程(菜鸟教程) http://www.runoob.com/mysql/mysql-tutorial.html MySQL 教程(极客 ...

  7. spring-boot-dependencies jar 不完整的问题

    集成 springboot 有两种方式. 1 直接 父项目指向  springboot <parent> <groupId>org.springframework.boot&l ...

  8. thinkphp5 怎么获取当前的模块,控制器和方法名

    //当前模块url地址 $request= Request::instance(); $module_name=$request->module(); $controller_name=$req ...

  9. Docker和Rancher

    Docker打包流程: Dockerfile文件和要打包docker的文件放在同级目录下: 1. docker build -t proj:proj-app:0.0.1 返回tagXXX 2. doc ...

  10. python list 转换为str

    xiaoquInfo = ['暂无参考均价', '中仪花园海伦堡', '113.403781', '22.540973', '2008年建成', '塔楼', '2元/平米/月', '海伦堡物业', ' ...