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 相关文章推荐
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
Jul 04 Javascript
BootStrap创建响应式导航条实例代码
May 31 Javascript
jQuery遍历json的方法(推荐)
Jun 12 Javascript
JavaScript与ActionScript3两者的同性与差异性
Sep 22 Javascript
JavaScript实现窗口抖动效果
Oct 19 Javascript
JavaScript实现实时更新系统时间的实例代码
Apr 04 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
Aug 08 Javascript
Angular使用Md5加密的解决方法
Sep 16 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
Jan 16 Javascript
详解vue-cli下ESlint 配置说明
Sep 03 Javascript
jquery实现动态改变css样式的方法分析
May 27 jQuery
了解重排与重绘
May 29 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
MySQL中create table语句的基本语法是
2007/01/15 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
分享10个原生JavaScript技巧
2015/04/20 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
Mac下安装vue
2018/04/11 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
Javascript和jquery在selenium的使用过程
2019/10/31 jQuery
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python translator使用实例
2008/09/06 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
Python可变参数用法实例分析
2017/04/02 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
Android笔试题总结
2014/11/29 面试题
会计电算化个人自我评价
2013/11/17 职场文书
自荐书范文
2013/12/08 职场文书
竞选部门副经理的自荐书范文
2014/02/11 职场文书
公司离职证明范本
2014/10/17 职场文书
2015政治思想表现评语
2015/03/25 职场文书
书法社团活动总结
2015/05/07 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
sql中mod()函数取余数的用法
2021/05/29 SQL Server
MySQL为id选择合适的数据类型
2021/06/07 MySQL
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL