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 tools 系列 scrollable(2)
Sep 06 Javascript
初窥JQuery(二)事件机制(2)
Dec 06 Javascript
Javascript 遮罩层和加载效果代码
Aug 01 Javascript
浅析js预加载/延迟加载
Sep 25 Javascript
jquery带动画效果幻灯片特效代码
Aug 27 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
Sep 19 Javascript
简单理解vue中el、template、replace元素
Oct 27 Javascript
weUI应用之JS常用信息提示弹层的封装
Nov 21 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
Jun 28 Javascript
Element Input组件分析小结
Oct 11 Javascript
vue实现树形结构样式和功能的实例代码
Oct 15 Javascript
详解ES6中class的实现原理
Oct 03 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向js函数传参的几种方法
2014/08/10 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
js数组Array sort方法使用深入分析
2013/02/21 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
搭建简单的nodejs http服务器详解
2017/03/09 NodeJs
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
JavaScript数组_动力节点Java学院整理
2017/06/26 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
python读取与写入csv格式文件的示例代码
2017/12/16 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
python编写猜数字小游戏
2019/10/06 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
python实现移动木板小游戏
2020/10/09 Python
pandas按条件筛选数据的实现
2021/02/20 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
管理科学大学生求职信
2013/11/13 职场文书
学历公证委托书
2014/04/09 职场文书
白血病捐款倡议书
2014/05/14 职场文书
群众路线党员自我评议范文2014
2014/09/24 职场文书
入党积极分子个人总结
2015/03/02 职场文书
大学生活感想
2015/08/10 职场文书
给学校的建议书400字
2015/09/14 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
pytorch 6 batch_train 批训练操作
2021/05/28 Python