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 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 18 Javascript
javascript 类方法定义还是有点区别
Apr 15 Javascript
可自定义速度的js图片无缝滚动示例分享
Jan 20 Javascript
jQuery 插件开发指南
Nov 14 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
Aug 04 Javascript
Angular.js回顾ng-app和ng-model使用技巧
Apr 26 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
May 16 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
Oct 21 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
Dec 14 Javascript
vue.js开发环境搭建教程
May 04 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
Jul 19 jQuery
基于vue打包后字体和图片资源失效问题的解决方法
Mar 06 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+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
javascript静态的url如何传递
2007/05/03 Javascript
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
2017/01/20 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
Python爬取京东的商品分类与链接
2016/08/26 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
python监控文件并且发送告警邮件
2018/06/21 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
树莓派实现移动拍照
2019/06/22 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
作为网站管理者应当如何防范XSS
2014/08/16 面试题
乐观大学生的自我评价
2014/01/10 职场文书
前台文员我鉴定
2014/01/12 职场文书
大学生冰淇淋店商业计划书
2014/01/14 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
学习礼仪心得体会
2014/09/01 职场文书
授权委托书协议书
2014/10/16 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
护士岗位竞聘书
2015/09/15 职场文书
mysql脏页是什么
2021/07/26 MySQL
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js