zoukankan      html  css  js  c++  java
  • js面试题-----事件及ajax

    题目1:编写一个通用的事件监听函数

    答案:

    function bindEvent(elem,type,selector,fn){
        if(fn==null){
            fn = selector;
            selector = null
        }
        elem.addEventListener(type,function(e){
            var target;
            if(selector){
                target = e.target;
                if(target.matches(selector)){
                    fn.call(target,e)
                }
            }else{
                fn(e)
            }
        })
    }

    题目2:描述事件冒泡流程

    答案:当给某元素绑定一个事件的时候,首先会触发自己 绑定的,然后会逐层向上级查找事件,这就是事件冒泡

    题目3:对于一个无限下拉加载图片的页面,如何给每个图片绑定事件

    答案:可以使用代理,通过对父级元素绑定一个事件,通过判断事件的target属性来进行判断,添加行为

    题目4:手动编写一个ajax,不依赖第三方库

    答案:

    var xhr = new XMLHttpRequest();
    xhr.open('GET','/api',false);
    xhr.onreadystatechange = function(){
        if(xhr.readystate==4){
            if(xhr.status==200){
                alert(xhr.responseText);
            }
        }
    }
    xhr.send(null);

    题目5:跨域的几种实现方式(端口、域名、协议只要一个不同就是跨域)

    答案:JSONP   服务器端设置http  header

    题目6:描述一下cookie,sessionStorage,localStorage的区别

    答案:cookie用户客户端和服务器端通信,但是它有本地存储的功能

          cookie的缺点:存储量太小,只有4kb。所有http请求都带着,会影响获取资源的效率。

       localStorage和sessionStorage

       最大存储量5M  API简单易用

    题目7:DOM事件类

      DOM事件级别

        DOM0    ele.onclick = function(){}

        DOM2    ele.addEventListener('click',function(){},false)

        DOM3    ele.addEventListener('keyup',function(){},false)

      事件模型

        捕获(从上到下)   冒泡(从下到上)

      事件流

        捕获阶段 -->目标阶段-->冒泡阶段

      描述DOM事件捕获的具体流程

        window->document->html->body->...

      Event对象的常见应用

        event.preventDefault() //阻止默认行为

        event.stopPropagation() //阻止冒泡

        event.stopImmediatePropagation() //事件响应优先级(例如绑定两个点击事件,当执行一个的时候另一个不让执行,可以在执行的里面加上这个)

        event.currentTarget // 当前绑定点击的事件

        event.target // 点击的目标对象 (这个在事件代理里面经常用到)

      自定义事件   

    var eve = new Event('custome');
          ev.addEventListener('custome',function(){
            console.log('custome')
          })
          ev.dispatchEvent(eve);
  • 相关阅读:
    efwplus框架
    注册区域
    社招面试记录与总结
    验证码 Captcha 之大插件
    发生内存泄漏?
    Flume+LOG4J+Kafka
    协议如何保证可靠传输
    oracle之spool详细使用总结(转)
    SSH协议详解(转)
    oracle nologging用法(转)
  • 原文地址:https://www.cnblogs.com/diasa-fly/p/7495803.html
Copyright © 2011-2022 走看看