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 相关文章推荐
jQuery判断iframe中元素是否存在的方法
May 11 Javascript
jQuery 事件的命名空间简单了解
Nov 22 Javascript
javascript原型模式用法实例详解
Jun 04 Javascript
JavaScript实现横向滑出的多级菜单效果
Oct 09 Javascript
AngularJS入门教程之服务(Service)
Jul 27 Javascript
js实现延迟加载的几种方法
Apr 24 Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 Javascript
原生js+cookie实现购物车功能的方法分析
Dec 21 Javascript
jquery实现企业定位式导航效果
Jan 01 jQuery
webpack4打包vue前端多页面项目
Sep 17 Javascript
JavaScript中的相等操作符使用详解
Dec 21 Javascript
基于Vue中的父子传值问题解决
Jul 27 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
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
Python实现数值积分方式
2019/11/20 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
商场总经理岗位职责
2014/02/03 职场文书
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
丧事主持词大全
2014/04/02 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
导师推荐信范文
2014/05/09 职场文书
新员工考核评语
2014/12/31 职场文书
环卫工人慰问信
2015/02/15 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
物业保洁员管理制度
2015/08/05 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书