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获取自定义属性(attr和prop)实例介绍
Apr 21 Javascript
jQuery验证插件 Validate详解
Nov 20 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
Aug 13 Javascript
js+canvas绘制五角星的方法
Jan 28 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
Sep 24 Javascript
jQuery 插件实现随机自由弹跳气泡样式
Jan 12 Javascript
PHP实现本地图片上传和验证功能
Feb 27 Javascript
jQuery实现ajax无刷新分页页码控件
Feb 28 Javascript
详解vue-cli + webpack 多页面实例应用
Apr 25 Javascript
Angular4绑定html内容出现警告的处理方法
Nov 03 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
Oct 09 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
Dec 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 cron中的批处理
2008/09/16 PHP
php实现rc4加密算法代码
2012/04/25 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
Js+Jq获取URL参数的集中方法示例代码
2014/05/20 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
protractor的安装与基本使用教程
2017/07/07 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
[54:18]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第一场 1月22日
2021/03/11 DOTA
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
python遍历小写英文字母的方法
2019/01/02 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
七一讲话心得体会
2014/09/05 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
酒会邀请函
2015/01/31 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
Spring boot admin 服务监控利器详解
2022/08/05 Java/Android