现在位置首页 / 前端开发 /正文

Jquery绑定和取消/移除事件

作者: IT小兵 | 2014年1月15日| 热度:℃ | 评论: |参与:

jQuery的绑定事件非常方便,有bind、live、one还有它帮你把一些常用的事件给单独了出来,比如控件的onclick事件,我们绑定onclick事件的时候只需要:

$("#testButton").click(function() {  
    alert("I'm Test Button");  
});

其中说明一下:jQuery的.bind()、.live()和.delegate()之间区别

.bind()

$('a').bind('click', function() { alert("That tickles!") });

这是最简单的绑定方法了。JQuery扫描文档找出所有的$(‘a’)元素,并把alert函数绑定到每个元素的click事件上。

.live()

$('a').live('click', function() { alert("That tickles!") });

JQuery把alert函数绑定到$(document)元素上,并使用’click’和’a’作为参数。任何时候只要有事件冒泡到document节点上,它就查看该事件是否是一个click事件,以及该事件的目标元素与’a’这一CSS选择器是否匹配,如果都是的话,则执行函数。

live方法还可以被绑定到具体的元素(或“context”)而不是document上,像这样:

$('a', $('#container')[0]).live(...);

.delegate()

$('#container').delegate('a', 'click', function() { alert("That tickles!") });

JQuery扫描文档查找$(‘#container’),并使用click事件和’a’这一CSS选择器作为参数把alert函数绑定到$(‘#container’)上。任何时候只要有事件冒泡到$(‘#container’)上,它就查看该事件是否是click事件,以及该事件的目标元素是否与CCS选择器相匹配。如果两种检查的结果都为真的话,它就执行函数。

可以注意到,这一过程与.live()类似,但是其把处理程序绑定到具体的元素而非document这一根上。精明的JS’er们可能会做出这样的结论,即$('a').live() == $(document).delegate('a'),是这样吗?嗯,不,不完全是。

为什么.delegate()要比.live()好用

基于几个原因,人们通常更愿意选用jQuery的delegate方法而不是live方法。考虑下面的例子:

$('a').live('click', function() { blah() });   // 或者   $(document).delegate('a', 'click', function() { blah() });

 

移除事件

    unbind(type [,data])     //data是要移除的函数

    $('#btn').unbind("click"); //移除click

    $('#btn').unbind(); //移除所有
    对于只需要触发一次的,随后就要立即解除绑定的情况,用one()

    $('#btn').one("click",function(){.......});
    模拟操作

    可以用trigger()方法完成模拟操作。

    $('#btn').trigger("click");
    $('#btn').click();

    触发自定义事件

    $('#btn').bind("myclick",function(){....});

    $('#btn').trigger("myclick");
    传递数据

    trigger(type [,data])

    $('#btn').bind("myclick",function(event,message1,message2){...........});

    $('#btn').trigger("myclick",["传给message1","传给message2"]);

    执行默认操作
    $("input").trigger("focus");

        //不仅会触发input元素绑定的focus事件,还会触发默认操作——得到焦点。

    $("input").triggerHandler("focus");

        //只触发绑定事件,不执行浏览器默认操作

    其他用法

    绑定多个事件类型

    $("div").bind("mouseover mouseout",function(){.....});

    添加事件命名空间

    $("div").bind("click.plugin",function(){......});

    在所绑定的世界类型后面添加命名空间,这样在删除事件时只需要指定命名空间即可。

        $("div").unbind(".plugin");   //删除空间内的事件

    $("div").trigger("click!"); //触发所以不包含在命名空间中的click方法

    如果包含在命名空间的也要触发:

        $("div").trigger("click");

另外摘录

================================================
$('div').bind('click', RecommandProduct);//为div绑定RecommandProduct 函数
$('div').unbind('click', RecommandProduct);//取消RecommandProduct 函数


点击阅读本文所属分类的更多文章: 前端开发 。和高手一起交流:346717337
友荐云推荐

未注明转发、原文均为本站原创。分享本文请注明 原文链接

给您更多信息和帮助

在这里您可以找到更多:

技术交流群:346717337 Jquery插件交流

投稿:suchso@vip.qq.com

承接:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/业务咨询

抢天猫双11红包
推荐使用阿里云服务器
echarts教程系列
本月最热文章

微信扫一扫,徜徉悠嘻网,您的休闲乐园

微信公众号:快乐每一天

随机文章
标签

技术交流群:346717337

投稿:suchso@vip.qq.com

专业专注:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/付费问题咨询