JS和JQ的event对象区别分析


Posted in Javascript onNovember 24, 2014

代码测试:

<div id="test"><p>test text<p></div> 

<script src="vendor/jquery-2.1.1.js"></script> 

<script> 

test.addEventListener('click', function(e){console.log(e);}, false), 

$('#test').on('click', function(e){console.log(e)}); 

</script>

结果分析:

js-jq-event-common:{ 

  altKey: false, 

  bubbles: true, 

  button: 0, 

  cancelable: true, 

  clientX: 58, 

  clientY: 13, 

  ctrlKey: false, 

  offsetX: 50, 

  offsetY: 5, 

  pageX: 58, 

  pageY: 13, 

  screenX: 58, 

  screenY: 122, 

  view: Window, 

  which: 1, 

  type: 'click', 

  timeStamp: 1407761742842, 

  metaKey: false, 

  relatedTarget: null, 

  target: div#test /*jq-evt的target不一定是jQuery选择器匹配的元素,可能是第一个捕获事件的元素,然后向上冒泡时其中一个才是选择器匹配的元素*/

}, 

 js-jq-event-diff:{ 

  currentTarget: null/*貌似一般都为null*/

              || div#test/*jq选择器匹配的元素在[currentTarget]属性*/, 

  eventPhase: 0 || 2, 

  toElement: div#test 

}, 

 js-event-solo:{ 

  x: 58, 

  y: 13, 

  cancelBubble: false, 

  charCode: 0, 

  clipboardData: undefined, 

  dataTransfer: null, 

  defaultPrevented: false, 

  srcElement: div#test, 

  fromElement: null, 

  detail: 1, 

  keyCode: 0, 

  layerX: 58, 

  layerY: 13, 

  returnValue: true

}, 

 jq-event-solo: { 

  buttons: undefined, 

  data: undefined, 

  delegateTarget: div#test/*谁在监听?就是这个元素啦。*/, 

  isDefaultPrevented: function, 

  handleObj: Object, 

  jQuery211024030584539286792: true, 

  originalEvent: MouseEvent, 

  shiftKey: false

} 

 body-click-delegate-event: { 

  currentTarget: HTMLBodyElement, 

  delegateTarget: HTMLBodyElement, 

  target: HTMLDivElement 

}

总结:

js的event参数中,不管是target, toElement, srcElement都是指向第一个触发事件的元素(还没冒泡),而fromElement在click事件中为null,所以,你如果是设置包含很多元素的父容器parent事件,那么触发事件的很可能是这个parent的子元素。
因此,在实际应用中,如果要引用parent,那你只能使用this了
jq的event参数中,
currentTarget是匹配你选择器的元素,就是你的所要元素;
delegateTarget是在监听事件的元素,属于被委托的元素
target同js的event参数里的target,是第一个触发事件的元素,没currentTarget有用(也不一定,比如在bodyclick事件中的应用)
有同学可能说,你要直接引用被设备事件的元素用this就得啦,何必理解currentTarget和target呢。这个想法证明你还只是用下jQuery而已,没用过类似Backbone之类的工具。

Backbone很多地方绑定了this,所以在它的函数中用this是不行的:

var view = Backbone.View.extend({ 

  el: document.body, 

   events: { 

    'click p': 'showText'     // 委托body监听p的click事件   }, 

   showText: function(e){ 

    var p = e.currentTarget;  // [currentTarget]获取选择器匹配的元素     this.log(p.innerHTML);    // 看到了吧,this并不指向p元素   }, 

   log: function(msg){ 

    console.log(msg); 

  } 

});

虽然JS,JQ中event对象大同小异,但还是有些许区别的,大家是否了解了呢

Javascript 相关文章推荐
JavaScript中的Window窗口对象
Jan 16 Javascript
理解JavaScript中的对象 推荐
Jan 09 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
May 08 Javascript
使用delegate方法为一个tr标签加一个链接
Jun 27 Javascript
jquery实现图片按比例缩放示例
Jul 01 Javascript
Jquery 实现table样式的设定
Jan 28 Javascript
jQuery使用元素属性attr赋值详解
Feb 27 Javascript
微信小程序 欢迎界面开发的实例详解
Nov 30 Javascript
Node.js的特点详解
Feb 03 Javascript
原生js实现放大镜特效
Mar 08 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
Jul 31 jQuery
解决layUI的页面显示不全的问题
Sep 20 Javascript
JavaScript实现大数的运算
Nov 24 #Javascript
使表格的标题列可左右拉伸jquery插件封装
Nov 24 #Javascript
jQuery实现隔行背景色变色
Nov 24 #Javascript
jQuery实现统计复选框选中数量
Nov 24 #Javascript
基于jQuery实现文本框缩放以及上下移动功能
Nov 24 #Javascript
基于jQuery实现复选框的全选 全不选 反选功能
Nov 24 #Javascript
基于jQuery实现下拉框
Nov 24 #Javascript
You might like
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
js编写简易的计算器
2020/07/29 Javascript
图解JS原型和原型链实现原理
2020/09/15 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
python使用cPickle模块序列化实例
2014/09/25 Python
python获取本机外网ip的方法
2015/04/15 Python
python实现剪切功能
2019/01/23 Python
python获取交互式ssh shell的方法
2019/02/14 Python
谈谈Python中的while循环语句
2019/03/10 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python3调用windows dos命令的例子
2019/08/14 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
电子信息专业学生自荐信
2013/11/09 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
财会专业大学生求职信
2014/09/26 职场文书
党员理论学习心得体会
2016/01/21 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python
Java常用函数式接口总结
2021/06/29 Java/Android
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript