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 相关文章推荐
封装好的省市地区联动控件附下载
Aug 13 Javascript
在网页里看flash的trace数据的js类
Jan 10 Javascript
javascript运动详解
Jul 06 Javascript
javascript实现支持移动设备画廊
Aug 24 Javascript
Bootstrap select下拉联动(jQuery cxselect)
Jan 04 Javascript
原生js实现打字动画游戏
Feb 04 Javascript
js时间戳格式化成日期格式的多种方法介绍
Feb 16 Javascript
JS计算距当前时间的时间差实例
Dec 29 Javascript
Vue 全局loading组件实例详解
May 29 Javascript
基于jQuery ztree实现表格风格的树状结构
Aug 31 jQuery
js实现页面图片消除效果
Mar 24 Javascript
Angular性能优化之第三方组件和懒加载技术
May 10 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
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
PHP mail()函数使用及配置方法
2014/01/14 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
php多进程应用场景实例详解
2019/07/22 PHP
捕获关闭窗口的脚本
2009/01/10 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
Python笔记之观察者模式
2019/11/20 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
浅析Python requests 模块
2020/10/09 Python
python在地图上画比例的实例详解
2020/11/13 Python
python 实现控制鼠标键盘
2020/11/27 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
两道JAVA笔试题
2016/09/14 面试题
《大海那边》教学反思
2014/04/09 职场文书
雾霾停课通知
2015/04/24 职场文书
2015年纪委工作总结
2015/05/13 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
机械生产实习心得体会
2016/01/22 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript