首页 > 编程语言 > 详细

javascript事件

时间:2019-02-23 17:53:23      阅读:143      评论:0      收藏:0      [点我收藏+]

JavaScript与HTML之间是通过事件交互的。

事件流:描述的是从页面中接收事件的顺从。事件流分为两种,一个是事件冒泡,一个是事件捕获。

事件冒泡:有最具体的元素接收,逐级向上传播到较为不具体的节点(文档);(div->body->html->document)

事件捕获:由不太具体的节点最早接收到事件,逐级向下传播到最具体的节点;(document->html->body->div)

DOM事件流:DOM2级事件,规定事件流包括3个阶段,事件捕获阶段、处于目标阶段、事件冒泡阶段。事件捕获阶段不会接收到事件,处于目标事件阶段时,元素刚好接收到事件,

事件冒泡事件,就可以对事件作出响应了。只有支持DOM2级事件流的浏览器才有DOM事件流。

事件处理程序:响应某个事件的函数,叫作事件处理程序。如click事件的事件处理程序是onclick。

添加HTML事件处理程序

1、直接写行内js代码(不推荐)

<input type="text" value="click" onclick="alert(‘clicked‘)">  //用单引号哦,双引号有可能编译出错    

2、引入一个函数

    <input type="text" value="click" onclick="funName()">

    function funName(){
        console.log("cliced");
    }

第二种指定事件处理程序具有一些读到之处。首先这样会创建一个封装这元素属性值的函数,这个函数中有一个局部变量event,也就是事件对象。(event不用定义就有,一般显示的定义一下)

在这个函数里面,this值等于事件的目标元素。

    var light=document.getElementsByClassName("light")[0];
    light.onclick=function(event){
        console.log(this);//事件的目标元素
        console.log(event);//事件对象
        console.log(this.className)//light
    }

DOM0级事件处理程序:javascript指定事件处理程序的传统方式,就是将一个函数赋值给一个事件处理程序属性。

上面代码就是典型的DOM0级事件处理程序。

删除通过DOM0级指定的事件处理程序:

light.onclick=null;

DOM2级事件处理程序:

添加:addEventListener(“事件名,函数,布尔值);(事件名:clik,而不是onclick);

删除:removeEventListener("事件名”,函数名,布尔值);(同过匿名函数添加的DOM2级事件是无法删除的);

DOM2级事件,可以给一个元素添加多次同中事件,而不会覆盖,而且还可以控制事件流是冒泡(false),还是捕获(true);不加布尔值参数,默认为false(冒泡);

IE事件处理程序:

添加:attachEvent("事件处理程序名称",事件处理程序函数);(事件处理程序名称是onclick而不是click)

删除:detachEvent(“事件处理程序名称”,事件处理程序函数名);(同样无法删除通过匿名函数添加的事件处理程序);

IE事件处理程序也可以添加多个同样的事件处理程序且不会覆盖,但执行顺序是从下到上,也就是后加的先执行,还有函数中的this指向window而不是当前元素。

跨浏览器事件处理程序:

恰当的使用能力检测就可以写出来一个跨浏览器事件处理程序如:

    var EventUtil={
        addHandler:function(element,type,handler){
            if(element.addEventListener){
                element.addEventListener(type,handler,false);
            }else if(element.attachEvent){
                element.attachEvent("on"+type,handler);
            }else{
                element["on"+type]=handler;
            }
        },
        removeHandler:function(element,type,handler){
            if(element.removeEventListener){
                element.removeEventListener(type,handler,false);
            }else if(element.detachEvent){
                element.detachEvent("on"+type,handler);
            }else{
                element["on"+type]=null;
            }
        }
    }
    //使用
    var ele=document.getElementsByClassName("light")[0];
    var handler=function(){
        console.log("handler");
    }
    EventUtil.addHandler(ele,"click",handler);//添加
    EventUtil.removeHandler(ele,"click",handler);//删除

 

javascript事件

原文:https://www.cnblogs.com/fqh123/p/10423510.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!