视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
详细解析js原生事件描述(附上代码,简单明了)
2020-11-27 19:48:54 责编:小采
文档


下面是我给大家整理的js原生事件,有兴趣的同学可以去看看。

1、事件流
事件流主要分为事件冒泡和事件捕获两种。事件冒泡,目标元素最先接收事件,然后逐渐向上层传播到较为不具体的节点。事件捕获完全相反,它的主要思想是较不具体的节点最先接收到事件,然后逐渐向下层传播到目标节点。

<html>
 <head>
 <title>事件流</title>
 </head>
 <body>
 <div id ="testDiv"></div>
 </body>
 </html>

当点击div时,冒泡事件接收到节点顺序div->body->html->document
捕获事件接收到节点顺序document->html->body->div

2、事件处理程序
a)HTML事件处理程序
某个元素支持的每种事件,都可以使用一个与相应事件处理程序同名的HTML特性来指定。
缺点:1、时差问题,可能在浏览器还未解析点击事件函数时,用户已经点击了页面元素——通过try-catch包裹错误
2、事件处理程序的作用域链在不同浏览器中会导致不同结果。
3、HTML代码和Javascript代码紧密耦合,不利于扩展维护。
b) DOM0级事件处理程序
将函数赋值给元素事件处理程序属性
var btn = document.getElementById(“#dv”);
btn.onclick = function(){};
想要删除元素的事件处理程序–btn.onclicn = null;

该方式添加的事件处理程序在事件冒泡阶段被处理。

c)DOM2级事件处理程序
指定事件处理程序addEventListener
删除事件处理程序removeEventListener
接收三个参数即要处理的事件名,事件处理程序的函数,布尔值(true表示捕获阶段调用处理程序,false表示冒泡阶段调用事件处理程序)

注意:addEventListener必须通过removeEventListener删除且参数必须一致,所以通过addEventListener添加的匿名函数不能被移除。

d)IE事件处理程序

attachEvent
detachEvent
两个方法接收相同的两个参数(”onclick”,”function(){}”);
由于IE8级更早版本只支持事件冒泡,所以通过attachEvent添加的事件处理程序只能被添加到冒泡阶段。
注意:attach中第一个参数是onclick而不是addEventListener中的click
IE事件处理程序attachEvent添加的在全局作用域中运行

var btn = document.getElementById(“#tes”); 
btn.attachEvent(“onclick”,function(){ 
alert(this == window); //true 
})

3、跨浏览器的事件处理程序。
由于不同浏览器之间事件处理程序不同,所以有必要编写可以跨浏览器使用的事件处理程序。

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.deatchEvent){
 element.deatch("on" + type,handler);
 }else{
 element["on" + type] = null;
 }
 }
}

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

JS弹出窗口代码大全

几个前端常见的JS排序代码

JS去掉字符串前后空格或去掉所有空格的用法

下载本文
显示全文
专题