美文网首页
JS常见面试问题

JS常见面试问题

作者: iliuqiang | 来源:发表于2020-03-14 08:58 被阅读0次

target与currentTarget区别

target在事件流的目标阶段;currentTarget在事件流的捕获,目标及冒泡阶段。只有当事件流处在目标阶段的时候,两个的指向才是一样的, 而当处于捕获和冒泡阶段的时候,target指向被单击的对象而currentTarget指向当前事件活动的对象(一般为父级)。

<div id="outer" style="background:#099;padding:20px 0;">  
    click outer  
    <p id="inner" style="background:#9C0;">click inner</p>   
</div>

<script type="text/javascript">
function G(id) {
  return document.getElementById(id);
}

function addEvent(obj, ev, handler) {
  if (window.attachEvent) {
    obj.attachEvent("on" + ev, handler);
  } else if (window.addEventListener) {
    obj.addEventListener(ev, handler, false);
  }
}

function test(e) {
  alert("e.target.tagName : " + e.target.tagName +"\n e.currentTarget.tagName : " +e.currentTarget.tagName);
}
var outer = G("outer");
var inner = G("inner");
//addEvent(inner, "click", test);
addEvent(outer, "click", test);
</script>

上面的示例中,当在outer上点击时,e.target与e.currentTarget是一样的,都是div;当在inner上点击时,e.target是p,而e.currentTarget则是div。

addEventListener()及attachEvent()区别

大家都知道事件的用法就是当某个事件(状况)被触发了之后就会去执行某个Function, 尤其是Javascript, 在当红AJAX的催化下, 了解Javascript的Event用法更加重要, 在这里就大概介绍一下Javascript的Event用法

【IE中】:

attachEvent函数语法:

target.attachEvent(type, listener);

target: 文档节点、document、window 或 XMLHttpRequest。
type: 字符串,事件名称,含“on”,比如“onclick”、“onmouseover”、“onkeydown”等。
listener :实现了 EventListener 接口或者是 JavaScript 中的函数。 例如:document.getElementById("txt").attachEvent("onclick",function(event){alert(event.keyCode);});

【非IE中】:

addEventListener函数语法:

target.addEventListener(type, listener, useCapture);

target: 文档节点、document、window 或 XMLHttpRequest。
type: 字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等。
listener :实现了 EventListener 接口或者是 JavaScript 中的函数。
useCapture :是否使用捕捉,一般用 false 。例如:document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false);

【使用场景】

一般我们在JS中添加事件,是这样子的:

obj.onclick=method

这种绑定事件的方式,兼容主流浏览器,但如果一个元素上添加多次同一事件呢?

obj.onclick=method1
obj.onclick=method2
obj.onclick=method3

如果这样写,那么只有最后绑定的事件,这里是method3会被执行,这个时候我们就不能用onclick这样的写法了,
主角改登场了,在IE中我们可以使用attachEvent方法:

btn1Obj.attachEvent("onclick",method1);
btn1Obj.attachEvent("onclick",method2);
btn1Obj.attachEvent("onclick",method3);

注意:使用格式是前面是事件类型,注意的是需要加on,比如onclick,onsubmit,onchange
以上方法的执行顺序:

method3->method2->method1

可惜这个微软的私人方法,火狐和其他浏览器都不支持,幸运的是他们都支持W3C标准的addEventListener方法

btn1Obj.addEventListener("click",method1,false);
btn1Obj.addEventListener("click",method2,false);
btn1Obj.addEventListener("click",method3,false);

以上方法的执行顺序:

method1->method2->method3

相关文章

  • 面试常见问题(js)

    1)get和post请求的区别 get的参数通过URL传递,post的参数是放在Request Body中。 ge...

  • 17.拓展:Vue.js 面试、常见问题答疑

    拓展:Vue.js 面试、常见问题答疑 在过去的很多面试中,我会经常问候选人一些关于 Vue.js 的问题。这些问...

  • JS面试常见问题汇总

    1、闭包 什么是闭包? 闭包就是可以访问另一个函数作用域中的变量的函数。 闭包的作用域链包含着它自己的作用域,以及...

  • JS常见面试问题

    target与currentTarget区别 target在事件流的目标阶段;currentTarget在事件流的...

  • JS需要注意的内容

    最近学生面试比较多,关于JS部分的常见面试问题,做一个简单的总结 1.变量提升 JS里的很多代码规则和C,Java...

  • 面试常见问题 - 目录

    面试常见问题01 - C++相关(施工ing) 面试常见问题02 - 算法与数据结构(施工ing) 面试常见问题0...

  • TypeScript--3.类

    在ES6之前,JS没有class关键字,JS的面向对象和继承也是面试中常见的问题.之前接触过PHP面向对象的话,在...

  • 2021 web高频面试题新人可看

    当日目标 1 常见面试题分布情况? 2 高频面试题 1 常见面试题分布情况 公司面试题一般分为js,vue,小程序...

  • Linux 1

    1 面试常见的Linux命令及问题整理 1 面试常见的Linux命令及问题整理 Linux命令1 ls -a -l...

  • 前端面试常见问题——JS篇

    1. 闭包 闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在函数内创建函数,通过函数访问...

网友评论

      本文标题:JS常见面试问题

      本文链接:https://www.haomeiwen.com/subject/ewtmshtx.html