html5中文学习网

您的位置: 首页 > 网站及特效实例 > javascript特效 » 正文

JS和JQ的event对象区别分析_javascript技巧_

[ ] 已经帮助:人解决问题

代码测试:5etHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
5etHTML5中文学习网 - HTML5先行者学习网
<div id="test"><p>test text<p></div> 5etHTML5中文学习网 - HTML5先行者学习网
<script src="vendor/jquery-2.1.1.js"></script> 5etHTML5中文学习网 - HTML5先行者学习网
<script> 5etHTML5中文学习网 - HTML5先行者学习网
test.addEventListener('click', function(e){console.log(e);}, false), 5etHTML5中文学习网 - HTML5先行者学习网
$('#test').on('click', function(e){console.log(e)}); 5etHTML5中文学习网 - HTML5先行者学习网
</script>5etHTML5中文学习网 - HTML5先行者学习网
5etHTML5中文学习网 - HTML5先行者学习网

结果分析:5etHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
5etHTML5中文学习网 - HTML5先行者学习网
js-jq-event-common:{ 5etHTML5中文学习网 - HTML5先行者学习网
  altKey: false, 5etHTML5中文学习网 - HTML5先行者学习网
  bubbles: true, 5etHTML5中文学习网 - HTML5先行者学习网
  button: 0, 5etHTML5中文学习网 - HTML5先行者学习网
  cancelable: true, 5etHTML5中文学习网 - HTML5先行者学习网
  clientX: 58, 5etHTML5中文学习网 - HTML5先行者学习网
  clientY: 13, 5etHTML5中文学习网 - HTML5先行者学习网
  ctrlKey: false, 5etHTML5中文学习网 - HTML5先行者学习网
  offsetX: 50, 5etHTML5中文学习网 - HTML5先行者学习网
  offsetY: 5, 5etHTML5中文学习网 - HTML5先行者学习网
  pageX: 58, 5etHTML5中文学习网 - HTML5先行者学习网
  pageY: 13, 5etHTML5中文学习网 - HTML5先行者学习网
  screenX: 58, 5etHTML5中文学习网 - HTML5先行者学习网
  screenY: 122, 5etHTML5中文学习网 - HTML5先行者学习网
  view: Window, 5etHTML5中文学习网 - HTML5先行者学习网
  which: 1, 5etHTML5中文学习网 - HTML5先行者学习网
  type: 'click', 5etHTML5中文学习网 - HTML5先行者学习网
  timeStamp: 1407761742842, 5etHTML5中文学习网 - HTML5先行者学习网
  metaKey: false, 5etHTML5中文学习网 - HTML5先行者学习网
  relatedTarget: null, 5etHTML5中文学习网 - HTML5先行者学习网
  target: div#test /*jq-evt的target不一定是jQuery选择器匹配的元素,可能是第一个捕获事件的元素,然后向上冒泡时其中一个才是选择器匹配的元素*/5etHTML5中文学习网 - HTML5先行者学习网
}, 5etHTML5中文学习网 - HTML5先行者学习网
 js-jq-event-diff:{ 5etHTML5中文学习网 - HTML5先行者学习网
  currentTarget: null/*貌似一般都为null*/5etHTML5中文学习网 - HTML5先行者学习网
              || div#test/*jq选择器匹配的元素在[currentTarget]属性*/, 5etHTML5中文学习网 - HTML5先行者学习网
  eventPhase: 0 || 2, 5etHTML5中文学习网 - HTML5先行者学习网
  toElement: div#test 5etHTML5中文学习网 - HTML5先行者学习网
}, 5etHTML5中文学习网 - HTML5先行者学习网
 js-event-solo:{ 5etHTML5中文学习网 - HTML5先行者学习网
  x: 58, 5etHTML5中文学习网 - HTML5先行者学习网
  y: 13, 5etHTML5中文学习网 - HTML5先行者学习网
  cancelBubble: false, 5etHTML5中文学习网 - HTML5先行者学习网
  charCode: 0, 5etHTML5中文学习网 - HTML5先行者学习网
  clipboardData: undefined, 5etHTML5中文学习网 - HTML5先行者学习网
  dataTransfer: null, 5etHTML5中文学习网 - HTML5先行者学习网
  defaultPrevented: false, 5etHTML5中文学习网 - HTML5先行者学习网
  srcElement: div#test, 5etHTML5中文学习网 - HTML5先行者学习网
  fromElement: null, 5etHTML5中文学习网 - HTML5先行者学习网
  detail: 1, 5etHTML5中文学习网 - HTML5先行者学习网
  keyCode: 0, 5etHTML5中文学习网 - HTML5先行者学习网
  layerX: 58, 5etHTML5中文学习网 - HTML5先行者学习网
  layerY: 13, 5etHTML5中文学习网 - HTML5先行者学习网
  returnValue: true5etHTML5中文学习网 - HTML5先行者学习网
}, 5etHTML5中文学习网 - HTML5先行者学习网
 jq-event-solo: { 5etHTML5中文学习网 - HTML5先行者学习网
  buttons: undefined, 5etHTML5中文学习网 - HTML5先行者学习网
  data: undefined, 5etHTML5中文学习网 - HTML5先行者学习网
  delegateTarget: div#test/*谁在监听?就是这个元素啦。*/, 5etHTML5中文学习网 - HTML5先行者学习网
  isDefaultPrevented: function, 5etHTML5中文学习网 - HTML5先行者学习网
  handleObj: Object, 5etHTML5中文学习网 - HTML5先行者学习网
  jQuery211024030584539286792: true, 5etHTML5中文学习网 - HTML5先行者学习网
  originalEvent: MouseEvent, 5etHTML5中文学习网 - HTML5先行者学习网
  shiftKey: false5etHTML5中文学习网 - HTML5先行者学习网
} 5etHTML5中文学习网 - HTML5先行者学习网
 body-click-delegate-event: { 5etHTML5中文学习网 - HTML5先行者学习网
  currentTarget: HTMLBodyElement, 5etHTML5中文学习网 - HTML5先行者学习网
  delegateTarget: HTMLBodyElement, 5etHTML5中文学习网 - HTML5先行者学习网
  target: HTMLDivElement 5etHTML5中文学习网 - HTML5先行者学习网
}5etHTML5中文学习网 - HTML5先行者学习网
5etHTML5中文学习网 - HTML5先行者学习网

总结:5etHTML5中文学习网 - HTML5先行者学习网

js的event参数中,不管是target, toElement, srcElement都是指向第一个触发事件的元素(还没冒泡),而fromElement在click事件中为null,所以,你如果是设置包含很多元素的父容器parent事件,那么触发事件的很可能是这个parent的子元素。 5etHTML5中文学习网 - HTML5先行者学习网
因此,在实际应用中,如果要引用parent,那你只能使用this了 5etHTML5中文学习网 - HTML5先行者学习网
jq的event参数中, 5etHTML5中文学习网 - HTML5先行者学习网
currentTarget是匹配你选择器的元素,就是你的所要元素; 5etHTML5中文学习网 - HTML5先行者学习网
delegateTarget是在监听事件的元素,属于被委托的元素 5etHTML5中文学习网 - HTML5先行者学习网
target同js的event参数里的target,是第一个触发事件的元素,没currentTarget有用(也不一定,比如在bodyclick事件中的应用) 5etHTML5中文学习网 - HTML5先行者学习网
有同学可能说,你要直接引用被设备事件的元素用this就得啦,何必理解currentTarget和target呢。这个想法证明你还只是用下jQuery而已,没用过类似Backbone之类的工具。5etHTML5中文学习网 - HTML5先行者学习网

Backbone很多地方绑定了this,所以在它的函数中用this是不行的:5etHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
5etHTML5中文学习网 - HTML5先行者学习网
var view = Backbone.View.extend({ 5etHTML5中文学习网 - HTML5先行者学习网
  el: document.body, 5etHTML5中文学习网 - HTML5先行者学习网
   events: { 5etHTML5中文学习网 - HTML5先行者学习网
    'click p': 'showText'     // 委托body监听p的click事件   }, 5etHTML5中文学习网 - HTML5先行者学习网
   showText: function(e){ 5etHTML5中文学习网 - HTML5先行者学习网
    var p = e.currentTarget;  // [currentTarget]获取选择器匹配的元素     this.log(p.innerHTML);    // 看到了吧,this并不指向p元素   }, 5etHTML5中文学习网 - HTML5先行者学习网
   log: function(msg){ 5etHTML5中文学习网 - HTML5先行者学习网
    console.log(msg); 5etHTML5中文学习网 - HTML5先行者学习网
  } 5etHTML5中文学习网 - HTML5先行者学习网
});5etHTML5中文学习网 - HTML5先行者学习网
5etHTML5中文学习网 - HTML5先行者学习网

虽然JS,JQ中event对象大同小异,但还是有些许区别的,大家是否了解了呢5etHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助