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 相关文章推荐
Firefox 无法获取cssRules 的解决办法
Oct 11 Javascript
js模拟点击事件实现代码
Nov 06 Javascript
js定时器怎么写?就是在特定时间执行某段程序
Oct 11 Javascript
WEB前端设计师常用工具集锦
Dec 09 Javascript
JS控制弹出新页面窗口位置和大小的方法
Mar 02 Javascript
使用console进行性能测试
Apr 27 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
Jan 05 Javascript
谈谈Vue.js——vue-resource全攻略
Jan 16 Javascript
JS中将多个逗号替换为一个逗号的实现代码
Jun 23 Javascript
JavaScript循环_动力节点Java学院整理
Jun 28 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
Jul 18 Javascript
axios封装与传参示例详解
Oct 18 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自动重命名文件实现方法
2014/11/04 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
js Function类型
2011/12/04 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
js confirm()方法的使用方法实例
2013/07/13 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
python list中append()与extend()用法分享
2013/03/24 Python
Python获取当前时间的方法
2014/01/14 Python
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
python实现类之间的方法互相调用
2018/04/29 Python
Python __slots__的使用方法
2020/11/15 Python
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
Marlies Dekkers内衣法国官方网上商店:国际知名的荷兰内衣品牌
2019/03/18 全球购物
中英双版中文教师求职信
2013/10/27 职场文书
物流专业大学应届生求职信
2013/11/03 职场文书
烹饪自我鉴定
2014/03/01 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
小学生大队委竞选稿
2015/11/20 职场文书
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android