实例讲解jQuery中对事件的命名空间的运用

 更新时间:2016年05月24日 14:51:29   作者:哈哈胡子  
jQuery支持带命名空间的事件,这样就可以方便地对同一事件使用不同的监听器并进行管理,接下来我们就以实例讲解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 事件监听器呢?该了解一下 jQuery 的事件命名空间了!

先上代码:

$(“#element”)
  .on(“click.myNamespace”, function() {
    console.log(“doSomething”);
  });

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

$(“#element”).off(“click.myNamespace”);

这是 jQuery 为我们提供的又一个方便而强大的功能,它的内部实现肯定很有意思!

我们再来看一些代码:

$(“#haorooms”).on("click.a",function(){});
$(“#haorooms”).on("click.a.bb",function(){});
$(“#haorooms”).on("dbclick.a",function(){});
$(“#haorooms”).on("mouseover.a",function(){});
$(“#haorooms”).on("mouseout.a",function(){});

当然,我们也可以用bind进行事件绑定。我们看到上面的代码,我们可以在事件后面,以点号,加我们的名字,就是事件命名空间。所谓事件命名空间,就是事件类型后面以点语法附加一个别名,以便引用事件,如”click.a”,其中”a”就是click当前事件类型的别名,即事件命名空间。

假如我们要删除如下命名空间:

$(“#haorooms”).on("click.a.bb",function(){});

我们可以用:

$(“#haorooms”).off("click.a.bb");//直接删除bb命名空间 【推荐】
$(“#haorooms”).off(".bb"); //直接删除bb命名空间 【推荐】
$(“#haorooms”).off(".a"); //删除.a命名空间下面所有的子空间【包括.a.bb  .a.cc等等,.a是.bb的父级,因此.a下面的都会删掉】
$(“#haorooms”).off("click");//直接解绑click,下面的命名空间都会删除。

要注意的是:

假如我们写了如下代码:

$(“#haorooms”).on("click",function(){});
$(“#haorooms”).on("click.a",function(){});
$(“#haorooms”).on("click.a.bb",function(){});

那么我们要用trigger触发click事件,也就是触发第一个,岂不是把click.a和click.a.bb都触发了,那如何解决这个问题呢,我只想触发click,而不触发click.a及以下的命名空间?

没关系! 有如下解决办法:

如果事件类型后面附加感叹号,则表示触发不包含命名空间的特定事件类型。

假如我们只想触发click,可以这么写:

$(“#haorooms”).trigger("click!")

只触发bb,可以这么写:

$(“#haorooms”).trigger("click.a.bb");

有了命名空间,可以方便我们在同一个事件上面做管理啦!!!

相关文章

  • jQuery实现打开页面渐现效果示例

    jQuery实现打开页面渐现效果示例

    这篇文章主要介绍了jQuery实现打开页面渐现效果的方法,结合实例形式分析了jQuery样式操作及页面元素的渐变效果实现技巧,需要的朋友可以参考下
    2016-07-07
  • JQuery 将元素显示在屏幕的中央的代码

    JQuery 将元素显示在屏幕的中央的代码

    在网站开发中我们经常需要将对话框显示在屏幕的中央。如果使用Javascript因为浏览器实现的差异,实现起来非常麻烦。但是JQuery可以很简单实现的搞定这一切。
    2010-02-02
  • jquery tab插件制作实现代码

    jquery tab插件制作实现代码

    jquery插件丰富,很多都是很好用的,最近学习了一下如何制作jquery插件,发现jquery插件制作其实很简单,这里介绍一下。
    2010-06-06
  • jquery实现邮箱自动补全功能示例分享

    jquery实现邮箱自动补全功能示例分享

    这篇文章主要介绍了jquery实现邮箱自动补全功能,大家参考使用吧
    2014-02-02
  • jQuery学习笔记之回调函数

    jQuery学习笔记之回调函数

    回调函数就是一个通过函数指针调用的函数.这篇文章主要介绍了jQuery学习笔记之回调函数的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • 基于jQuery实现的向下滑动二级菜单效果代码

    基于jQuery实现的向下滑动二级菜单效果代码

    这篇文章主要介绍了基于jQuery实现的向下滑动二级菜单效果代码,通过jquery鼠标事件控制针对页面元素的链式操作实现菜单切换的功能,非常简单实用,需要的朋友可以参考下
    2015-08-08
  • jquery 鼠标滑动显示详情应用示例

    jquery 鼠标滑动显示详情应用示例

    本文示例要为大家实现的效果是鼠标滑动,显示详情,代码很简洁,很适合学习
    2014-01-01
  • jquery计算鼠标和指定元素之间距离的方法

    jquery计算鼠标和指定元素之间距离的方法

    这篇文章主要介绍了jquery计算鼠标和指定元素之间距离的方法,涉及jQuery针对页面位置属性与鼠标事件的相关操作技巧,需要的朋友可以参考下
    2015-06-06
  • jQuery实现查看图片功能

    jQuery实现查看图片功能

    这篇文章主要为大家详细介绍了jQuery实现查看图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • jQuery实现合并表格单元格中相同行操作示例

    jQuery实现合并表格单元格中相同行操作示例

    这篇文章主要介绍了jQuery实现合并表格单元格中相同行操作,结合实例形式分析了jQuery针对table表格实现单元格合并的相关操作技巧,需要的朋友可以参考下
    2019-01-01

最新评论