分享好友 前端技术首页 频道列表

JQuery..bind命名空间

Jquery  2023-02-12 18:420

先看手册,由于bind方法有三个参数(type,[data],fn),所以手册上这么介绍:
.bind() 方法是用于往文档上附加行为的主要方式。所有JavaScript事件对象, 比如focus, mouseover, 和 resize,都是可以作为type参数传递进来的。 

任何作为type参数的字符串都是合法的;如果一个字符串不是原生的JavaScript事件名, 那么这个事件处理函数会绑定到一个自定义事件上。这些自定义事件绝对不会由浏览器触发,但可以通过使用.trigger()或 者.triggerHandler()在其他代码中手动触发。

如果type参数的字符串中包含一个点(.)字符, 那么这个事件就看做是有命名空间的了。这个点字符就用来分隔事件和他的命名空间。举例来说,如果执 行 .bind('click.name', handler) ,那么字符串中的 click 是事件类型,而字符串 name 就是命名空间。命名空 间允许我们取消绑定或者触发一些特定类型的事件,而不用触发别的事件。参考unbind()来获取更多信息。

当一个事件传到一个元素上,所有绑定在上面的针对哪个事件的处理函数都会触发。如果注册了多个事件 处理函数,总是按照绑定的顺序依次触发。当所有绑定的事件处理函数执行完毕后,事件继续沿着普通的事件冒泡途径上浮。



jQuery的 bind / unbind 方法应该说使用很简单,而且大多数时候 可能并不会用到,取而代之的是直接用 click / keydown 之类的事件名风格的方法来做事件绑定操作。

但 假设如下情况:需要在运行时根据用户交互的结果进行不同click事件处理逻辑的绑定,因而理论 上会无数次对某一个事件进行 bind / unbind 操作。但又希望 unbind 的时候只把自己绑上去的处理逻辑给释放掉而不是所有其他地方有 可能的额外的同一事件绑定逻辑。

这 时候如果直接用 .click() / .bind('click') 加 上 .unbind('click') 来进行重复绑定的话,被 unbind 掉的将是所有绑定在元素上的 click 处理逻辑,潜在会影响到该元素 其他第三方的行为。当然如果在bind的时候是显示定义了function变量的话,可以在unbind的时候提供 function作为第二个参数来指 定只unbind其中一个处理逻辑,但实际应用中很可能会碰到各种进行匿名函数绑定的情况。

对于这种问题,jQuery的解决方案是使用事件绑定的命名空间。即在事件名称后添 加 .something 来区分自己这部分行为逻辑范围。

比 如 用 .bind('click.myCustomRoutine',function(){...}); 同样是把匿名函数绑定到 click 事件(你 可以用自己的命名空间多次绑定不同的行为方法上去),当unbind的时候用 .unbind('click.myCustomRoutine') 即可 释放所有绑定到 .myCustomRoutine 命名空间的 click 事件,而不会解除其他通过 .bind('click') 或另外的命名 空间所绑定的事件行为。

同时,使用命令空间还可以让你一次性 unbind 所有此命名空间下的自定义事件绑定,通 过 .unbind('.myCustomRoutine') 即可。

要 注意的是,jQuery的命名空间并不支持多级空间。因为在jQuery里面,如果 用 .unbind('click.myCustomRoutine.myCustomSubone') ,解除的是命名空间分别 为 myCustomRoutine 和 myCustomSubone 的两个并列命名空间下的所有 click 事件,而不 是 "myCustomRoutine 下的 myCustomSubone 子空间"。 

查看更多关于【Jquery】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
邮箱自动提示Jquery 插件-实战.失败品
看到很多 SNS 类网站都有 邮箱注册功能. 参考了一下技术过程,触发事件为 focus keyup 和 后缀 mousedown 事件基本匹配过程就可以完成了. 所以写了下面的代码. 对  万一用户 选择错误.目前很多SNS 站都是要 手动删除后另行选择.我就写一个 focus 替换函数. 

0评论2023-03-08353

JQuery——事件绑定bind和on的区别
引言  通过JQuery对目标对象绑定事件我们大部分都是通过$('选择器').事件名()的形式实现,其实对事件的绑定还可以使用on和bind,为了搞明白两者之间的区别特做记录,以备以后查阅。正文  bind和on都是给元素绑定事件用的,但两者在使用时有些差别,我们最

0评论2023-03-08787

jQuery select操作
获取Select选择的Text和Value:$("#select_id").change(function(){//code...});//为Select添加事件,当选择其中一项时触发var checkText=$("#select_id").find("option:selected").text(); //获取Select选择的Textvar checkValue=$("#select_id").val(); //获

0评论2023-03-08577

17种常用的jQuery全屏焦点图代码 jq 获取焦点
jQuery全屏焦点图特效制作带标题的焦点图切换代码 jQuery背景和banner图片一起切换全屏焦点图切换代码 jQuery仿音悦台网站全屏带标题的焦点图轮播代码 jQuery响应式焦点图插件制作响应式全屏焦点图切换代码 jquery html5响应式幻灯片插件网站响应式全屏幻

0评论2023-03-08612

Jquery 插件 实现浮动层 网页右下弹出层
最近由于公司项目原因要添加一个在网站首页的浮动的弹出层,且比较急,上网大概查找了一下,无奈只能自己动手写了一个。比较简单。源码如下: (function ($) {            $.fn.Messager = function (option) {             

0评论2023-03-08580

Jquery获取服务器端控件的三种方式 js获取服务器地址
一 Jquery获得服务器控件值的方法由于ASP.NET网页运行后,服务器控件会随机生成客户端id,jquery获取时候不太好操作,google了下,总结有以下3种方法:服务器控件代码:asp:TextBox ID="txtUserID" runat="server"/asp:TextBox 1. $("#%=txtUserID.ClientID%"

0评论2023-03-08822

jQuery习题 jquery100例
1.在div元素中,包含了一个span元素,通过has选择器获取div元素中的span元素的语法是?        答:$("div:has(span)"); 2.在ul元素中,添加了多个li元素,通过jquery选择器获取最后一个li元素的方法是?                答:$("li:last")3.在页面中有

0评论2023-03-08817

JQuery的父、子、兄弟节点选择器 jquery获取父节点和子节点
jQuery.parent(expr) //找父元素jQuery.parents(expr)//找到所有祖先元素,不限于父元素jQuery.children(expr)//查找所有子元素,只会找到直接的孩子节点,不会返回所有子孙jQuery.contents()//查找下面的所有内容,包括节点和文本。jQuery.prev()//查找上一

0评论2023-03-08671

一个关于 jquery 和 php 的 jsonp 例子(与后台PHP成功通信)
script $(document).ready(function(){$.ajax({ url:'http://localhost/test/jsonp.php', dataType:"jsonp", //重点,使用jsonp方式解决跨域问题 jsonp:"jsonpcallback", //回调函数名,和php端统一 timeout: 5000, success:function(data, status){ alert('s

0评论2023-03-08838

jQuery委托 jquery事件委托方法
$('#container').on('click', '.elementClass', function() {// code});http://stackoverflow.com/questions/10082031/why-use-jquery-on-instead-of-click

0评论2023-03-08736

更多推荐