浏览器事件

作者: 凯凯frank | 来源:发表于2018-04-06 18:38 被阅读0次

事件流描述的是从页面中接收事件的顺序。
html事件

<script>
    function showMsg(){
      console.log(this)//window
        alert('type:'+event.type)
    }
</script>
<input type="button" onclick="showMsg()">
<input type="button" onclick="console.log(this)">

会创建一个封装这元素属性值的函数,函数中有一个局部变量交event。此时的this值等于事件的目标元素。
缺点:
1.如果函数在按钮的下方,用户再html元素一出现就点击按钮,如果事件尚未加载完成,会导致报错
2.html与js代码紧密耦合

DOM0级事件

var btn=document.getElementById('myBtn')
btn.onclick=function(){
  console.log(this.id) //myBtn
}
this指向当前元素
btn.onclick=null //删除事件处理程序
DOM0级只能添加一个事件处理程序,后添加的会覆盖前面添加的。

DOM2级事件

DOM2级事件(IE8及更早的不支持)规定的事件包括三个阶段:事件捕获阶段、处于目标阶段、冒泡阶段。
DOM2级事件定义了两个方法,addEventListener()、removeEventListener()。3个参数:事件名、事件处理函数、布尔值(是否在捕获阶段调用事件处理函数)

var btn=document.getElementById('myBtn')
btn.addEventListener('click',function(){
  console.log(this.id)//myBtn
},false)

使用DOM2级方法可以添加多个事件处理程序,并且按照添加他们的顺序触发。(jquery添加多个事件也是如此)。
要移除事件只能使用removeEventListener,移除时传入的参数要和添加时传入的参数相同,也就是说不能使用匿名函数。
IE9、Firefox、Safari、Chrome、Opera都支持DOM2级事件处理程序。

IE事件

IE实现了与DOM中类似的两个方法,attachEvent、detachEvent。接收两个参数,事件名、事件处理函数。由于Ie8及更早的版本只支持事件冒泡。所以attachEvent添加的事件都会被添加到冒泡阶段。

var btn=document.getElementById('myBtn')
    btn.attachEvent("onclick",function(){
        console.log(this)//window
    })

注意,attachEvent的第一个参数是onclick,并且事件处理程序中的this指向window。attachEvent也可以为一个元素添加多个事件处理程序,不过触发的顺序和DOM2相反,最后添加的先触发。可以通过detachEvent删除事件。
IE、Opera支持IE事件处理程序

跨浏览器的事件处理程序

事件对象

在触发DOM上的事件时,会产生一个事件对象Event,这个对象包含事件的元素、事件的类型、以及其与他特定事件相关的信息,比如鼠标操作导致的事件对象中,包含鼠标的位置信息。
事件处理程序中,无论使用什么方法(DOM0级、DOM2级)都会传入event对象。在通过html特性指定事件处理程序是,变量event中保存event对象。

<input type="button" onclick="alert(event.type)" value="btn">

event对象都会有以下成员

currentTarget :事件处理程序所注册的元素
target : 触发事件的元素
type :事件类型
preventDefault():取消事件的默认行为
stopPropagation():取消事件的进一步捕获或冒泡
stopImmediatePropagation():取消事件的进一步捕获或冒泡,同时阻止任何事件处理程序被调用(DOM3级事件中新增)

IE中的事件对象

cancelBubble:默认值为false,将其设置为true就可以取消事件冒泡(与DOM中的stopPropagation作用相同)
returnValue :默认true,设置为false取消事件的默认行为(同DOM中preventDefault作用相同)
srcElement : 触发事件的元素(与DOM中的target一样)

喜欢的朋友点个赞吧!

相关文章

  • 代码:JavaScript 监听 css3动画

    浏览器的CSS前缀。transitionend事件和animationend事件标准的浏览器事件,但在WebKit...

  • 手写代码

    手写事件侦听器,并要求兼容浏览器 手写事件模型 手写事件代理,并要求兼容浏览器 手写事件触发器,并要求兼容浏览器 ...

  • 合成事件

    合成事件 合成事件是浏览器原生事件的跨浏览器的包装器,他拥有浏览器的所有原生事件相同接口,与原生事件不同,是rea...

  • 合成事件中e.persist()方法

    合成事件 合成事件对象实例为SyntheticEvent,他是浏览器原生事件的跨浏览器包装器,能够兼容所有浏览器,...

  • JavaScript 经典实例收集整理

    跨浏览器添加事件 跨浏览器移除事件 跨浏览器阻止默认行为 跨浏览器获取目标对象 跨浏览器获取滚动条位置 跨浏览器获...

  • JS事件—事件模型

    监听函数 浏览器的事件模型,就是通过监听函数(listener)对事件做出反应。事件发生后,浏览器监听到了这个事件...

  • 多个事件的使用

    浏览器事件 一、 BOM :浏览器相关的事件 和 window window.onscroll = functi...

  • 如何阻止事件冒泡和默认行为?

    1.背景介绍 浏览器的事件发生顺序 浏览器的事件发生顺序分为事件冒泡与事件捕获,分别由微软和网景公司提出。 事件冒...

  • 如何阻止事件冒泡和默认行为?

    1.背景介绍 浏览器的事件发生顺序 浏览器的事件发生顺序分为事件冒泡与事件捕获,分别由微软和网景公司提出。 事件冒...

  • React——(二)

    React事件 React中的事件是SyntheticEvent。这是一个基于浏览器本机事件的跨浏览器的封装。它与...

网友评论

    本文标题:浏览器事件

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