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 相关文章推荐
jQuery的实现原理的模拟代码 -1 核心部分
Aug 01 Javascript
JavaScript 基础篇(一)
Mar 30 Javascript
原生JavaScript实现连连看游戏(附源码)
Nov 05 Javascript
node.js中的fs.writeFile方法使用说明
Dec 14 Javascript
jQuery mobile 移动web(6)
Dec 20 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
Apr 17 Javascript
EasyUI创建人员树的实例代码
Sep 15 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
Feb 23 Javascript
JavaScript实现微信红包算法及问题解决方法
Apr 26 Javascript
详解vue 兼容IE报错解决方案
Dec 29 Javascript
VUE简单的定时器实时刷新的实现方法
Jan 20 Javascript
完美解决vue 中多个echarts图表自适应的问题
Jul 19 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
php一些错误处理的方法与技巧总结
2013/08/10 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python SQLite3数据库操作类分享
2014/06/10 Python
简述Python中的面向对象编程的概念
2015/04/27 Python
python算法表示概念扫盲教程
2017/04/13 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
python实现windows下文件备份脚本
2018/05/27 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
公司管理建议书范文
2014/03/12 职场文书
毕业生就业协议书
2014/04/11 职场文书
应届毕业生求职信
2014/05/26 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
用CSS3画一个爱心
2021/04/27 HTML / CSS
python not运算符的实例用法
2021/06/30 Python
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS