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代码[翻译]
Feb 12 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
Apr 14 Javascript
php对mongodb的扩展(初识如故)
Nov 11 Javascript
jquery用offset()方法获得元素的xy坐标
Sep 06 Javascript
简述AngularJS相关的一些编程思想
Jun 23 Javascript
javascript中undefined与null的区别
Aug 16 Javascript
详解jQuery中的DOM操作
Dec 23 Javascript
jQuery插件版本冲突的处理方法分析
Jan 16 Javascript
利用node.js爬取指定排名网站的JS引用库详解
Jul 25 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
May 16 Javascript
vue实现可视化可拖放的自定义表单的示例代码
Mar 20 Javascript
vue路由缓存的几种实现方式小结
Feb 02 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
php Smarty初体验二 获取配置信息
2011/08/08 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
深入认识JavaScript中的函数
2007/01/22 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
python制作花瓣网美女图片爬虫
2015/10/28 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
Python 自动刷博客浏览量实例代码
2017/06/14 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
超30万乐谱下载:Musicnotes.com
2016/09/24 全球购物
StubHub新加坡:购买和出售全球活动门票
2017/03/10 全球购物
计算机开发个人求职信范文
2013/09/26 职场文书
幼儿园春游活动方案
2014/01/19 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
诉前财产保全担保书
2014/05/20 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
教师工作表现评语
2014/12/31 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers
一文搞懂MySQL索引页结构
2022/02/28 MySQL