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获得下拉框值的代码
Aug 13 Javascript
深入理解JavaScript作用域和作用域链
Oct 21 Javascript
jWiard 基于JQuery的强大的向导控件介绍
Oct 28 Javascript
IE8中使用javascript动态加载CSS的解决方法
Jun 17 Javascript
jquery小火箭返回顶部代码分享
Aug 19 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
Jun 09 Javascript
jquery 校验中国身份证号码实例详解
Apr 11 jQuery
浅谈vue,angular,react数据双向绑定原理分析
Nov 28 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&平移轮播效果
Aug 16 Javascript
微信小程序开发打开另一个小程序的实现方法
May 17 Javascript
JS实现canvas简单小画板功能
Jun 23 Javascript
解决vue项目本地启动时无法携带cookie的问题
Feb 06 Vue.js
网页前端登录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/02 日漫
资料注册后发信小技巧
2006/10/09 PHP
php标签云的实现代码
2012/10/10 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
北大青鸟学生求职信
2013/09/24 职场文书
班干部演讲稿
2014/04/24 职场文书
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
MySQL基础(一)
2021/04/05 MySQL