最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 21:29:16
文档

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

JS和JQ的event对象区别分析_javascript技巧:代码测试: 代码如下: test text test.addEventListener('click', function(e){console.log(e);}, false), $('#test').on('click', function(e){console.log(e)}); 结果分析: 代码如下: js-jq-ev
推荐度:
导读JS和JQ的event对象区别分析_javascript技巧:代码测试: 代码如下: test text test.addEventListener('click', function(e){console.log(e);}, false), $('#test').on('click', function(e){console.log(e)}); 结果分析: 代码如下: js-jq-ev

代码测试:

代码如下:

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 /*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对象大同小异,但还是有些许区别的,大家是否了解了呢

文档

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

JS和JQ的event对象区别分析_javascript技巧:代码测试: 代码如下: test text test.addEventListener('click', function(e){console.log(e);}, false), $('#test').on('click', function(e){console.log(e)}); 结果分析: 代码如下: js-jq-ev
推荐度:
标签: js 对象 javascript
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top