jQuery事件的绑定、触发、及监听方法简单说明


Posted in Javascript onMay 10, 2016

如果你在写文章或者 Demo,为了简单,你当然可以用事件监听函数,以及那些事件对象提供的方法等。但在实际中,有一些方法和属性是有兼容性问题的,所以我们会使用 jQuery 来消除兼容性问题。

下面简单的来说一下 jQuery 中事件的基础操作。

绑定事件和事件代理

在 jQuery 中,提供了诸如 click() 这样的语法糖来绑定对应事件,但是这里推荐统一使用 on() 来绑定事件。语法:

.on( events [, selector ] [, data ], handler )

events 即为事件的名称,你可以传递第二个参数来实现事件代理,具体文档.on() 这里不再赘述。

处理过兼容性的事件对象(Event Object)

事件对象有些方法等也有兼容性差异,jQuery 将其封装处理,并提供跟标准一直的命名。

如果你想在 jQuery 事件回调函数中访问原来的事件对象,需要使用 event.originalEvent,它指向原生的事件对象。

触发事件 trigger 方法

点击某个绑定了 click 事件的节点,自然会触发该节点的 click 事件,从而执行对应回调函数。

trigger 方法可以模拟触发事件,我们单击另一个节点 elementB,可以使用:

$(elementB).on('click', function(){
 $(elementA).trigger( "click" );
});

事件监听
jQuery 中的事件监听,完全可以用 addEventListener/attachEvent 模拟,分别对应于现代浏览器和 IE ,可以把两个方法封装一下,但是为了方便,这里把其他事件相关处理,如移除事件监听、阻止默认事件等方法统一写在一个对象中,方便调用,具体代码如下:

// 事件处理对象
 
var EventUtil = {
  
 // 添加事件监听 
 add: function(element, type, callback){
   
  if(element.addEventListener){
   element.addEventListener(type, callback, false);
  } else if(element.attachEvent){
   element.attachEvent('on' + type, callback);
  } else {
   element['on' + type] = callback;
  }
 },
 
 // 移除事件监听
 remove: function(element, type, callback){
   
  if(element.removeEventListener){
   element.removeEventListener(type, callback, false);
  } else if(element.detachEvent){
   element.detachEvent('on' + type, callback);
  } else {
   element['on' + type] = null;
  }
 
 },
 
 // 跨浏览器获取 event 对象
 getEvent: function(event){
  
  return event ? event : window.event;
 },
 
 // 跨浏览器获取 target 属性
 getTarget: function(event){
   
  return event.target || event.srcElement;
 },
 
 // 阻止事件的默认行为
 preventDefault: function(event){
  
  if(event.preventDefault){
   event.preventDefault();
  } else {
   event.returnValue = false;
  }
 },
 
 // 阻止事件流或使用 cancelBubble
 stopPropagation: function(){
   
  if(event.stopPropagation){
   event.stopPropagation();
  } else {
   event.cancelBubble = true;
  }
 }
 
};
 
// 使用例子
var at = document.getElementbyId('atemp');
EventUtil.add(at, 'click', function(){
 
 console.log('被点击了');
 
 event = EventUtil.getEvent(event); // 跨浏览器获取 event 对象
 EventUtil.preventDefault(event); // 阻止默认事件
});
Javascript 相关文章推荐
ExtJS 2.0实用简明教程 之Ext类库简介
Apr 29 Javascript
web页面数据展示新想法(json)
Jun 08 Javascript
JQuery从头学起第三讲
Jul 06 Javascript
jquery中ajax学习笔记3
Oct 16 Javascript
JS实现图片预加载无需等待
Dec 21 Javascript
js 时间格式与时间戳的相互转换示例代码
Dec 25 Javascript
jquery操作HTML5 的data-*的用法实例分享
Aug 17 Javascript
Javascript节点关系实例分析
May 15 Javascript
jQuery定义插件的方法
Dec 18 Javascript
AngularJS基础 ng-copy 指令实例代码
Aug 01 Javascript
详解angular element()方法使用
Apr 08 Javascript
js实现1,2,3,5数字按照概率生成
Sep 12 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
May 10 #Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
May 10 #Javascript
JS实现登录页面记住密码和enter键登录方法推荐
May 10 #Javascript
详解JavaScript中的自定义事件编写
May 10 #Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
May 10 #Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
May 10 #Javascript
解决jquery无法找到其他父级子集问题的方法
May 10 #Javascript
You might like
PHP初学入门
2006/11/19 PHP
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
PHP chmod 函数与批量修改文件目录权限
2010/05/10 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
javascript instanceof,typeof的区别
2010/03/24 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
jQuery实现磁力图片跟随效果完整示例
2016/09/16 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
javscript 数组扁平化的实现
2020/02/03 Javascript
利用Python实现颜色色值转换的小工具
2016/10/27 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
PyQt 线程类 QThread使用详解
2017/07/16 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
举例说明类变量和实例变量的区别
2016/06/30 面试题
安全教育感言
2014/03/04 职场文书
英文自荐信常用句子
2014/03/26 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
行政诉讼答辩状
2015/05/21 职场文书
关于JavaScript回调函数的深入理解
2021/06/27 Javascript