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 相关文章推荐
Ajax提交与传统表单提交的区别说明
Feb 07 Javascript
JS实现很酷的水波文字特效实例
Feb 26 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
Dec 05 Javascript
简单实现轮播图效果的实例
Jul 15 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
Oct 27 Javascript
jQuery实现页面倒计时并刷新效果
Mar 13 Javascript
Vue.js 2.0学习教程之从基础到组件详解
Apr 24 Javascript
详解用vue编写弹出框组件
Jul 04 Javascript
vue系列之requireJs中引入vue-router的方法
Jul 18 Javascript
Vue使用NPM方式搭建项目
Oct 25 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
Jul 10 jQuery
浅谈react useEffect闭包的坑
Jun 08 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数据类型判断函数有哪些
2013/09/23 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
php生成html文件方法总结
2014/12/01 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
看了就知道什么是JSON
2007/12/09 Javascript
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
JS中的Replace方法使用经验分享
2015/05/20 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
[02:33]2018DOTA2亚洲邀请赛赛前采访——LGD
2018/04/04 DOTA
python:动态路由的Flask程序代码
2019/11/22 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
tensorflow 模型权重导出实例
2020/01/24 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
python打包多类型文件的操作方法
2020/09/21 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
Linux上比较文件的命令都有哪些
2013/09/28 面试题
爸爸的花儿落了教学反思
2014/02/20 职场文书
公司经理聘任书
2014/03/29 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书