jQuery中四种事件监听的区别
原文链接:点我
我们知道jquery提供了四种事件监听方式,分别是bind、live、delegate、on,下面就分别对这四种事件监听方式分析。
已知有4个列表元素:
列表元素1
列表元素2
列表元素3
列表元素4
1.bind
bind(type,[data],function(eventObject)) bind是使用频率较高的一种,作用就是在选择到的元素上绑定特定事件类型的监听函数,
参数函数如下:
type:事件类型,如click、change、mouseover等;
data:传入监听函数的参数,通过event.data取到;
function:监听函数,可传入event对象,这里的event是jquery封装的event对象。
源码:
bind: function( types, data, fn ) {
return this.on( types, null, data, fn );
}
可以看到内部是调用了on方法。
bind的特点就是会把监听器绑定到目标元素上,有一个邦一个,在页面上的元素不会动态添加的时候使用它没有什么问题。
但如果列表中动态增加一个“列表5”,点击它是没有反应的,必须再bind一次才行。
测试代码:
$(function(){
$('div').bind('click',function(){
if($(this).text()=='列表4'){
$(this).after('<div>列表5</div>');
}
alert($(this).text());
})
8 })
注意:jquery中append()和after()方法都可以添加元素,不同之处是append()是在要添加元素的末尾(在元素内)添加,而after()是在要添加的元素之后(在元素外)。
2.live
live(type, [data], fn)
live的参数和bind一样,它又有什么蹊跷呢,我们还是先瞄一眼源码:
live: function( types, data, fn ) {
jQuery( this.context ).on( types, this.selector, data, fn );
return this;
}
可以看到live方法并没有将监听器绑定到自己(this)身上,而是绑定到了this.context上了。
通过 live() 方法添加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素),
使用事件委托的优点一目了然,新添加的元素不必再绑定一次监听器。
将上面代码中的bind改为live后,点击列表5就可以弹出“列表5”了。
注意:live方法在在 jQuery 版本 1.7 中被废弃,在版本 1.9 中被移除,官方建议使用on代替。
测试代码:
$(function(){
$('div').live('click',function(){
if($(this).text()=='列表4'){
$(this).after('<div>列表5</div>');
}
alert($(this).text());
})
})
3.delegate
将监听事件绑定在就近的父级元素上,
源码:
delegate: function( selector, types, data, fn ) {
return this.on( types, selector, data, fn );
}
delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,
并规定当这些事件发生时运行的函数。
这下,我们的选择又多了一些灵活性,不单可以利用事件委托,还可以选择委托的对象。
代码,实现效果,点击div,两个p标签的文字颜色都发生变化。 <div>
<p>div内的p标签</p>
</div>
<p>div外的p标签</p>
$(function(){
$('div').delegate('p','click',function(){
$('p').css('color','blue');
});
4、on
on(type,[selector],[data],fn)
参数与delegate差不多但还是有细微的差别,首先type与selector换位置了,其次selector变为了可选项。
on() 方法在被选元素及子元素上添加一个或多个事件处理程序。
自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。
代码,实现效果同上,把delegate改为on,第一个参数为click,第二个参数p可写可不写,第三个参数同上。
$(function(){
$('div').on('click','p',function(){
$('p').css('color','red');
});
jQuery中四种事件监听的区别的更多相关文章
- Android点击Button按钮的四种事件监听方法总结
首先我们在activity_main.xml里面先定义一个Button空间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <RelativeLayout xmlns:a ...
- jQuery EasyUI/TopJUI输入框事件监听
jQuery EasyUI/TopJUI输入框事件监听 代码如下: <div data-toggle="topjui-panel" title="" da ...
- 从jQuery的缓存到事件监听
不知道大家有没有发现,用jQuery选择器"选择"之后的DOM上会添加jQuery*********属性. <DIV id=d1 jQuery1294122065250=&q ...
- VMware中四种网络连接模式的区别
安装好VMwareWorkstations之后,进行虚拟机网络配置时有四种网络连接方式,桥接.仅主机.NAT.LAN区段. 之所以有不同的模式,在我看来是为了满足不同的网络需求,总的来说:桥接.NAT ...
- Android 开发中的View事件监听机制
在开发过程中,我们常常根据实际的需要绘制自己的应用组件,那么定制自己的监听事件,及相应的处理方法是必要的.我们都知道Android中,事件的监听是基于回调机制的,比如常用的OnClick事件,你了解它 ...
- onscroll事件没有响应的原因以及vue.js中添加onscroll事件监听的方法
1 onscroll事件失效 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- clipboard 在 vue 项目中,on 事件监听回调多次执行
clipboard 定义一个全局变量 import ClipboardJS from "clipboard"; if(clipboard){ clipboard.destroy() ...
- java中的key事件监听机制
package com.at221; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.sw ...
- jquery easyui控件事件监听委托给jquery事件监听,keyup取最新值问题
<div id="<?php echo NS; ?>toolbar"> <div style="padding:5px"> ...
随机推荐
- Struts2学习(三)上传下载
今天记录一下利用struts2实现上传下载,借此案例说明一下struts2的开发流程. 须要注意的是struts2版本号不同非常多地方的写法是不同的.本例使用struts2.3.15 .有差别的地方文 ...
- android:为TextView加入样式——下划线,颜色,设置链接样式及前背景色
实现下划线及颜色设置: public class AtActivity extends Activity { LinearLayout ll; /** Called when the acti ...
- Android 输入框限制字符输入数
有时候对Android的输入框有字符输入数量的限制,而且显示字符输入的数量.通过下面方式能够实现: 1.自己定义LimitNumEditText继承EditText import android.co ...
- Linux下离线安装MySQL
Linux下安装mysql 1 检查并卸载已安装mysql 命令:rpm -qa|grep -i mysql 命令:rpm -e --nodeps ‘上个命令后显示的本机已安装mysql依赖’ 如果存 ...
- 23.STL容器小结
- Storm框架基础(一)
* Storm框架基础(一) Storm简述 如果你了解过SparkStreaming,那么Storm就可以类比着入门,在此我们可以先做一个简单的比较: 在SparkStreaming中: 我们曾尝 ...
- jsp输出当前时间
在jsp页面中输出完整的时间,格式为"年 月 日 时:分:秒" <% Date date = new Date(); SimpleDateFormat t = new Si ...
- Service和Servlet的区别
1. 整体概念 Servlet是Java对于Web开发而产生的一项技术,可以说Servlet技术是Java专有的,它是服务器端的技术,客户端通常是浏览器,Servlet提供了请求/响应模式,是JAVA ...
- perl异常处理
程序脚本在运行过程中,总会碰到这样那样的问题,我们会预知一些问题并为其准备好处理代码,而有一些不能预知.好的程序要能尽可能多的处理可能出现的异常问题,本文就总结了一些方法来解决这些异常,当然perl在 ...
- ArcGIS api for javascript——地图配置-定制平移动画
描述 本例展示了当用户点击平移按钮时如何定制地图的动画.panDuration和panRate是Dojo动画属性,可以分别确定动画的duration和帧刷新的rate.这些属性的单位都是毫秒,panD ...