jQuery -> bind / live / delegate 的终结者 - on
Bind()方法:
给元素绑定事件
形式:
.bind(eventType[,eventData],handler(eventObject))
eventType,string类型,一个或多个DOM事件的名称,比如:click、submit
eventData,Object,将会传递给handler函数的数据,也就是eventObject的data属性中,如果要调用那么使用eventObject.data
Handler,function,当事件被触发时执行的函数
.bind(eventType[,eventData][,preventBubble])
eventType,string,一个或多个DOM事件的名称,比如:click、submit
eventData,Object,将会传递给handler函数的数据,也就是eventObject的data属性中,如果要调用那么使用eventObject.data
preventBubble,boolean,默认为true,当设置为false的时候将阻止浏览器默认事件发生,并且阻止事件冒泡。.
.bind(events)
Events,object,使用json的形式,为当前元素定义多个事件,例如:
{
click: function() {
$( this ).addClass( "active" );
},
mouseenter: function() {
$( this ).addClass( "inside" );
},
mouseleave: function() {
$( this ).removeClass( "inside" );
}
}
说明:
bind可以给当前存在的节点添加事件,即便使用标签选择器选择一类标签,但是也不能给新加的标签绑定目标时间。当只是简单的给固定的元素绑定事件时,可以使用该方法。但是如果是较为复杂的会动态添加执行事件元素的情况下,bind方法不适用。
bind中定义的evnetType,可以是任意的字符串,各个字符串用空格隔开,当该字符串是默认是DOM事件时,调用DOM事件,如果是不默认的DOM事件,那么就调用自定义事件,这些自定义事件不会被浏览器触发。但是可以通过trigger()方法手动触发。
当evnetType中包含"."的时候,.后边的字符串表示命名空间,也就是当前事件绑定在某命名空间中,那么命名空间中的事件不会影响其他事件,对于命名了解不深所以对于这块有更深的了解后再说明。
对于一个元素可以bind多个同一事件,事件触发按照绑定的顺序触发。
在handler事件中可以使用this关键词来表示触发当前事件的当前DOM对象,注意是DOM对象不是JQuery对象,要转化为JQuery对象使用$(this)。
Live()方法:
该方法已经在Jquery 1.7不推荐使用,1.9中删除。可以使用on()、delegate()方法替代。
不使用live()方法的原因:
1,live方法执行需要先通过选择器选择元素,而在大文档中,会耗费大量时间在选择特定元素的操作上。
2,live()方法不支持链接使用,例如 $( "a" ).find( ".offsite, .external" ).live(... );不能很好的工作。
3,由于所有的live()事件都附着到document对象上,事件会在执行前通过最远、最慢的传播路径。
4,移动设备上click时间不会产生冒泡,所以live()方法不会起作用。
还有其他原因。所以live事件已经被删除了。
Delegate()方法:
该方法可以基于某些特定元素(通过选择器得到),附加一个或多个事件到特定元素内部选择器指定的元素上,无论选择出的目标元素是当前存在还是将来创建。
形式:
.deletgate(selector,evnetType,handler(evnetObject))
selector,string,用来过滤触发事件的元素,即目标元素。
eventType,string,与bind中介绍的eventType一样,多个事件只用空格隔开。
Handler(eventObject),被触发的事件。
.delegate(selector,eventType,eventData,handler(eventObject))
selector,string,用来过滤触发事件的元素,即目标元素。
eventType,string,与bind中介绍的eventType一样,多个事件只用空格隔开。
eventData,Object,将会传递给handler函数的数据,也就是eventObject的data属性中,如果要调用那么使用eventObject.data
Handler(eventObject),被触发的事件。
.delegate(selector,events):
selector,string,用来过滤触发事件的元素,即目标元素。
Events,object,
使用json的形式,为当前元素定义多个事件,例如:
{
click: function() {
$( this ).addClass( "active" );
},
mouseenter: function() {
$( this ).addClass( "inside" );
},
mouseleave: function() {
$( this ).removeClass( "inside" );
}
}
说明:
在JQuery1.7之后delegate已经被on取代,在1.4-1.7之间,delegate任然是最有效的给元素绑定事件的方式。
on方法(JQuery推荐使用):
附加一个事件处理函数的一个或多个事件到选定的元素,无论选择出的目标元素是当前存在还是将来创建。
形式:
.on(events[,selector][,data],handler(evnetObject))
Events,string,事件名,可以是空格隔开的多个事件也可是带有命名空间的事件。Click submit 或 click.myPlugin
Selector,string,用来指明调用on方法的JQuery对象的特殊子元素,如果没有指定那么就是绑定到调用on方法的JQuery对象。
data,object,通过eventObject.data传递到触发事件中的数据
Handler(eventObject),被触发的函数,这里也可以使用false,false==returnfalse。
.on(events[,selector][,data])
Events,object,
使用json的形式,为当前元素定义多个事件,例如:
{
click: function() {
$( this ).addClass( "active" );
},
mouseenter: function() {
$( this ).addClass( "inside" );
},
mouseleave: function() {
$( this ).removeClass( "inside" );
}
}
Selector,string,用来指明调用on方法的JQuery对象的特殊子元素,如果没有指定那么就是绑定到调用on方法的JQuery对象
Data,object,通过eventObject.data传递到触发事件中的数据
//动态生成的元素要用这个方法
$(document).on("click", "#xxx", function() {
……
});
//非动态生成的元素还可以直接用on,但不能用live
$("#xxx").on("click", function(){
……
});

说明:
on方法是当前JQuery推荐使用的事件绑定方法,相反方法是off(),附加只运行一次就删除函数的方法是one()。
jQuery -> bind / live / delegate 的终结者 - on的更多相关文章
- jquery bind、delegate、live、on的区别及联系
jquery bind.delegate.live.on的区别及联系 概述 jquery提供了好几个API都可以实现事件绑定, 如 delegate, live , bind 等, 可是有没有疑惑这几 ...
- jQuery bind()与delegate()的区别
笔试题: bind()与delegate()的区别主要有三点: 1 绑定目标 .bind直接绑在目标元素上 .delegate绑在父元素上 2 监听个数 .bind监听个数多——每个目标元素都需要添 ...
- jQuery -> bind / live / delegate 终结者 - on
最近的一项研究jQuery.利用获得的最新版本1.11.1. 据该书打下面的代码示例,,反正也发现跑不起来. html <div class="container"> ...
- Jquery中的bind(),live(),delegate(),on()绑定事件方式
博客转载为作者:枫上善若水http://www.cnblogs.com/xilipu31/p/4105794.html 前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到d ...
- jQuery 中bind(),live(),delegate(),on() 区别(转)
当我们试图绑定一些事件到DOM元素上的时候,我相信上面这4个方法是最常用的.而它们之间到底有什么不同呢?在什么场合下用什么方法是最有效的呢? 准备知识: 当我们在开始的时候,有些知识是必须具备的: D ...
- 转 jQuery 中bind(),live(),delegate(),on() 区别
当我们试图绑定一些事件到DOM元素上的时候,我相信上面这4个方法是最常用的.而它们之间到底有什么不同呢?在什么场合下用什么方法是最有效的呢? 准备知识: 当我们在开始的时候,有些知识是必须具备的: D ...
- jQuery 2.0.3 源码分析 事件绑定 - bind/live/delegate/on
事件(Event)是JavaScript应用跳动的心脏,通过使用JavaScript ,你可以监听特定事件的发生,并规定让某些事件发生以对这些事件做出响应 事件的基础就不重复讲解了,本来是定位源码分析 ...
- jQuery事件绑定on()、bind()与delegate() 方法详解
jquery中有四种事件绑定函数,bind(),live(),on(),delegate(),由于live现在并不常用,因此不做过多解释. 1. bind()用法 $("div p" ...
- 浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式
前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅,也希望该文章日后能 ...
随机推荐
- api接口签名验证(MD5)
不要急,源代码分享在最底部,先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候, ...
- SQL Error (1130): Host '192.168.1.126' is not allowed to connect to this MySQL server
通过HeidiSQL连接MYSQL数据库报错: SQL Error (1130): Host '192.168.1.126' is not allowed to connect to this MyS ...
- css实现绝对定位元素居中
前端我们时常需要封装一些弹出框,这些弹出框大小都不能确定,多半是用js实现居中. 现在有了css3可以不用js了. .box{ background-color: blueviolet; width: ...
- EXT 省市三级联动及默认选择
var provinceStore = Ext.create('Ext.data.Store', { fields: ['id', 'name'], proxy: { type: 'ajax', ur ...
- [zhang] ViewController的生命周期分析和使用
iOS的SDK中提供很多原生ViewController,大大提高了我们的开发效率,下面是我的一些经验. 一.结构 按结构可以对iOS的所有ViewController分成两类:1.主要用于展示内容的 ...
- 记一次Android内存分析过程
前言 上周五的时候,祝峰找到我,反映了Android收银台买单结果页内存飙升的问题.我在自己的机器上也试着重现了一下,发现从支付台-微信支付成功并返回后,进入买单结果页的内存会突然增大,导致GC,如图 ...
- centos 用dvd创建yum 仓库
环境:CentOS 6.0 默认的yum是以网络来安装的,在没有网络或者网速不佳的情况下,通过yum来安装软件是意见非常痛苦的事情.其实对于CentOS DVD来说,里面提供的软件就足以满足我们的需要 ...
- 从Windows 2012标准版升级到数据中心版,标准评价版本升级到标准体验版本并激活
对于Windows 7.Windows 8操作系统,可以在图形界面中通过输入序列号,从低版本直接升级到高的版本,例如从Windows 7家庭版升级到专业版或旗舰版.而对于Windows Server ...
- AngularJs 入门系列-2 表单验证
对于日常的开发来说,最常见的开发场景就是通过表单编辑数据,这里涉及的问题就是验证问题. angularjs 内置已经支持了常见的验证方式,可以轻松实现表单验证. 1. 绑定 为了方便,我们在 $sco ...
- location.href跳转不正确
今天写这个随笔的用意是为了记录我遇到的一种情况,导致我页面无法正确跳转 location.href跳转页面其实很简单,只要附上url就可以了,但是今天我在测试一个跳转时是这么写的: location. ...