jQuery事件绑定on()、bind()与delegate() 方法详解
jquery中有四种事件绑定函数,bind(),live(),on(),delegate(),由于live现在并不常用,因此不做过多解释。
1. bind()用法
$("div p").bind("click",function(){
alert("点击");
});
同:
$("div p").click(function(){
alert("点击");
});
这里为div绑定了click事件,相应为弹出内容,绑定简单快捷,但是存在两个问题:
1;用了隐式迭代方法,如果匹配的元素特别多,例如div中有多个p标签,方法就绑定多次,影响性能。
2;对于尚未存在的元素无法绑定,点击页面上的按钮,将动态添加一个p元素,点击这个p元素会发现动作没有响应。
用delegate方法可以解决以上问题。 2.delegate()用法
$("div").delegate("p", "click", function () {
alert($(this).text());
});
这种方式采用了事件委托概念,不直接为p元素绑定事件而是为其父元素(或者祖先元素也可)绑定事件,当在div内点击任意元素时,事件一层层根据event target向上冒泡,直到到达绑定事件的元素,在冒泡过程中,如果事件的currentTarget与选择器匹配,就会执行代码。
这样就解决了bind()的问题,不用再一个个为p元素绑定事件,也可以为动态添加进来的p元素绑定,甚至如果将事件绑定到document上,不用等document准备就可以执行绑定。不过冒泡的方式也有会存在性能问题。
3.on()用法
on()将之前的绑定事件方法做了统一无论bind()还是delegate()其实都是通过on()方法实现的,只是参数不同罢了。因此我在工作中用的比较多的是on()。
on()在1.7版本之后出现。以上的代码便可以如下来改写:
$("div").on("click","p",function(){
alert($(this).text());
})
有绑定事件自然也有移除事件,以上的方法对应的解绑事件分别是:
$( "div p" ).unbind( "click", handler );
$( "div" ).undelegate( "p", "click", handler );
$( "div" ).off( "click", "p", handler );
当然我们可以根据自己的需要来选用合适的方法,需要注意的是:
1.选择器匹配到的元素比较多时,不要用bind()迭代绑定。
2.用id选择器时可以用bind()。
3.需要给动态添加的元素绑定事件时,用delegate(),或者on()。
4.用delegate(),和on(),dom树不要太深。
5.尽量使用on()
jQuery事件绑定on()、bind()与delegate() 方法详解的更多相关文章
- JQuery事件绑定,bind与on区别
jquery事件绑定bind:向匹配元素添加一个或多个事件处理器 $(selector).bind("click",data,function); live:向当前或未来的匹配元素 ...
- jQuery三种事件绑定方式.bind(),.live(),.delegate()
.bind(), .live(), 和 .delegate()之间的区别并不明显.但是理解它们的不同之处有助于写出更简洁的代码,并防止我们的交互程序中出现没有预料到的bug. 基础 DOM树 首先,图 ...
- jquery 事件委托三种事件绑定方式.bind(),.live(),.delegate()
http://www.ituring.com.cn/article/467# http://www.cnblogs.com/lvdabao/archive/2013/08/30/3290603.htm ...
- Jquery ajax提交表单几种方法详解
[导读] 在jquery中ajax提交表单有post与get方式,在使用get方式时我们可以直接使用ajax 序列化表单$( 表单ID) serialize();就行了,下面我来介绍两个提交表单数据的 ...
- jquery .post .get中文参数乱码解决方法详解
jquery默认的编码为utf-8,做项目时有时处于项目需要用到ajax提交中文参数,乱码问题就很头疼了,折腾了许久终于弄出来了.为了便于传输,我们首先将需要用到的参数用javascript自带的函数 ...
- jQuery事件绑定—on()、bind()与delegate()
啃了一段日子的js相关了,学的过程中发现在jQuery中绑定事件时,有人用bind(),有人用on(),有人用delegate(),还有人用live(),看代码的时候觉得都实现功能了也就掀过去了,只是 ...
- 深入学习jQuery事件绑定
× 目录 [1]bind [2]trigger [3]delegate[4]on[5]one 前面的话 javascript有HTML.DOM0级.DOM2级和IE这四种事件处理程序,而jQuery对 ...
- jQuery 事件绑定 和 JavaScript 原生事件绑定
总结一下:jQuery 事件绑定 和 JavaScript 原生事件绑定 及 区别 jQuery 事件绑定 jQuery 中提供了四种事件监听绑定方式,分别是 bind.live.delegate.o ...
- jQuery事件绑定和委托实例
本文实例讲述了jQuery事件绑定和委托.分享给大家供大家参考.具体方法如下: jQuery事件的绑定和委托可以用多种方法实现,on() . bind() . live() . delegate ...
随机推荐
- VS 与JIRA Bamboo的连接
atlassian-vs-connector 可以百度下地址 一些配置 效果:
- viewport设置
<meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable ...
- 在64位SQL Server中创建Oracle的链接服务器
当我们同时使用SQL Server和Oracle来存储数据时,经常会用到跨库查询.为了方便使用跨库查询,一个最好的办法就是通过创建链接服务器来实现.既可以在SQL Server中创建Oracle的链接 ...
- 正则提取 html 里<input> 标记的value 值
获取html 标记的值: :年月日 结果:您选择的是2014年1月22日 使用了Regex 对象,得到一个 MatchCollection,然后进行处理. string mes = @"&l ...
- C#利用反射机制创建对象
"反射"其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间. 1.假设你要反射一个 DLL 中的类,并且没有引用 ...
- Linux中profile、bashrc、bash_profile之间的区别和联系
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. 英文描述为: # /etc/pr ...
- 一个前端引用Facebook评论插件案例
最近公司海外的同事提了一个新的需求:那就是将Facebook的评论系统接入到公司海外网站的资讯详情页. 下面做一个简单的介绍: 首先我们登录到Facebook开发者平台:然后进入评论插件系统(http ...
- sass心得
1.sass的安装:(1)下载安装Ruby,记得安装的时候勾选第二项,(2)打开控制面板gem install sass(人品好的话,一下子就能安装成功)(3)如果(2)安装不成功进行一下步骤:gem ...
- redis 使用
Redis 使用 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...
- MongoDB由于目标计算机积极拒绝,无法连接
遇到这个问题的时候,可以通过以下步骤解决: 1.打开Mongo安装包:进入Mongo下的data文件夹下的db文件夹,找到Mongod.lock,删除. 2.在命令行中输入: mongod.exe - ...