栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

JS和JQ的event对象区别分析

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JS和JQ的event对象区别分析

代码测试:

复制代码 代码如下:

test text




结果分析:

复制代码 代码如下:
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
},
 js-jq-event-diff:{
  currentTarget: null
              || div#test,
  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对象大同小异,但还是有些许区别的,大家是否了解了呢

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/105430.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号