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 相关文章推荐
鼠标事件延时切换插件
Mar 12 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
AngularJS基础知识笔记之过滤器
May 10 Javascript
BootstrapTable refresh 方法使用实例简单介绍
Feb 20 Javascript
Javascript实现跨域后台设置拦截的方法详解
Aug 04 Javascript
Webpack中雪碧图插件使用详解
May 25 Javascript
解析vue data不可以使用箭头函数问题
Jul 03 Javascript
微信小程序Echarts覆盖正常组件问题解决
Jul 13 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
Nov 09 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
Dec 16 Javascript
vue实现页面切换滑动效果
Jun 29 Javascript
浅谈es6中的元编程
Dec 01 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使用Jpgraph创建折线图效果示例
2017/02/15 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
如何实现JS函数的重载
2006/09/22 Javascript
prototype Element学习笔记(篇二)
2008/10/26 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
基于dataset的使用和图片延时加载的实现方法
2017/12/11 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
kali中python版本的切换方法
2019/07/11 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
美国性感内衣店:Yandy
2018/06/12 全球购物
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
大学生的四年学习自我评价
2013/12/13 职场文书
公务员培训自我鉴定
2014/02/01 职场文书
校园安全检查制度
2014/02/03 职场文书
企业趣味活动方案
2014/08/21 职场文书
施工员岗位职责范本
2015/04/11 职场文书
初三化学教学反思
2016/02/22 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers