博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DOM之事件(一)
阅读量:5048 次
发布时间:2019-06-12

本文共 2957 字,大约阅读时间需要 9 分钟。

  DOM事件,就是浏览器或用户针对页面可以做出的某种动作,我们称这些动作为DOM事件。它是用户和页面交互的核心。当动作发生(事件触发)时,我们可以为其绑定一个或多个事件处理程序(函数),来完成我们想要实现的功能。

 

  为了方便理解下面即将要讲解的内容,在正式开始之前,让我们先来了解一个最常用的事件:click,点击事件:当我们用鼠标点击页面时,如果我们为页面绑定了事件处理程序,那么这时该程序将被执行。

  这里先放一段HTML代码片段供讲解使用:

1   2      7  8  9     
10
11
12
13
14

 

一  事件处理程序的绑定和解除

  1,  句柄

  绑定:element.on+事件类型(type) = function (e){};

    同一事件类型只能绑定一个事件处理程序,无兼容性问题。

1 var wrap = document.getElementsByClassName("wrapper")[0];2 wrap.onclick = function (){3    alert("wrapper"); 4 };//现在点击红色块将会弹出提示框

  解除:element.on+type = false/null/’’;

1 wrap.onclick = null;2 //现在再点击红色块将不会再弹出提示框了

  2,  监听

  绑定:element.addEventListener(事件类型,fn,boolean)

    W3C标准方法,同一事件类型可以绑定一个或多个事件处理程序,IE老版本不兼容

1 wrap.addEventListener("click",test,false);2 function test() {3     alert("wrapper");4 }5 //也可以在第二个参数的位置直接使用匿名函数

  解除:element.removeEventListener(事件类型,fn,false)

wrap.removeEventListener("click",test,false);//现在点击将不会再弹出提示框了

       另外:IE有个独有的方法,obj.attchEvent(‘on’+type,fn),功能和监听方式一样。解除方式是:element.detachEvent(‘on’+type,fn)

       注意,如果绑定的是匿名函数,则无法解除。

 

二   事件处理模型

         1,事件捕获和冒泡

    事件的触发其实分为两个阶段,捕获阶段和冒泡阶段。我们既可以把事件处理函数绑定在事件捕获阶段,也可以绑定在冒泡阶段。当某一事件被触发时,先执行捕获再执行冒泡。

         事件捕获:当父元素的某类型事件被触发时,所有后代元素上绑定的同类型事件均会被层层触发。

         事件冒泡:当子元素的某类型事件被触发时,所有父元素上绑定的同类型事件均会被层层触发。

         句柄方式绑定的事件都是在冒泡阶段,监听方式根据提供的第三个参数设置事件捕获或冒泡:true则在捕获阶段,false则在冒泡阶段。

1 var main = document.getElementsByClassName("main")[0];2 main.addEventListener("click",function(){3     alert("main");4 },false); 5 /*现在点击绿色区域会先弹出main,点击确认后再弹出wrapper。如果wrap和main绑定程序的第三个参数都是true,则会先弹出wrapper,后弹出main。 6 如果同一个元素在两个阶段都绑定了同一类型事件,则按照绑定的先后顺序执行*/

  2,阻止事件冒泡

    有时候我们并不想让绑定的事件层层向上传递,只想被点击的那个元素执行相关任务,那么我们就需要阻止事件冒泡: 

1 main.addEventListener("click",function(e){2   alert("main");3   e.stopPropagation();4  //e.cancelBubble = true;IE的方法5 },false);

       3,阻止事件默认行为

               诸如点击submit类型的按钮,页面会提交表单、鼠标右键页面会出现右键菜单、点击a标签会跳转页面等等都是事件的默认行为,是浏览器预定义的处理程序,我们可以通过以下几种方式阻止它们。

               return false;句柄方式绑定的事件处理程序才能实现。

               e.preventDefault();W3C标准方式。

               e.returnValue = false;兼容低版本IE浏览器。

1 document.oncontextmenu = function (e){2     e.preventDefault();3     alert("现在右键点击不会出现菜单栏了");4 };

       4,事件对象

        每当有事件被触发,浏览器都会记录当前事件触发的详细信息,并把它们封装成一个对象,传递给事件处理函数,IE浏览器有一点不同,它是把该对象存储在window.event里面,而不是直接传递给事件处理函数。

             事件对象有两个属性:target或srcElement(IE),它存储的是事件源对象,即实际触发该事件的对象。不是捕获的,也不是冒泡的。通过事件源对象,可以轻松实现事件委托功能。

             事件委托的功能是:当子元素个数很多或不确定,且每个子元素都需要绑定执行类似功能的事件处理函数时,通过在父元素上绑定该事件处理函数,在函数内部获取事件源对象(某子元素),通过事件冒泡机制,确保能让每个子元素在被触发相应事件时,事件处理函数都能被正确执行。

1 /* 2 
    3
  • 1
  • 4
  • 2
  • 5
  • 3
  • 6
  • 4
  • 7
  • 5
  • 8
  • 6
  • 9
  • 7
  • 10 。。。11
12 假如现在有这样一个列表,数目很多,而且还会动态更新,我们要实现的功能是点击每个li都弹出它自己的内容13 */14 var ul = document.getElementsByTagName("ul")[0];15 ul.onclick = function (e){16 var ev = e || window.event;17 target = ev.target || ev.srcElement;18 alert(target.innerText); 19 };20 //这样就可以很简单的实现这个功能了,即使后面假如了新的li,点击新的li依然可是弹出正确的内容

 

下一篇讲详细讲解JavaScript中具体的DOM事件和他们的功能。

 

转载于:https://www.cnblogs.com/ruhaoren/p/11388858.html

你可能感兴趣的文章
学习python:day1
查看>>
css3动画属性
查看>>
第九次团队作业-测试报告与用户使用手册
查看>>
Equal Sides Of An Array
查看>>
CentOS笔记-用户和用户组管理
查看>>
Mongodb 基本命令
查看>>
Qt中QTableView中加入Check列实现
查看>>
“富豪相亲大会”究竟迷失了什么?
查看>>
控制文件的备份与恢复
查看>>
返回代码hdu 2054 A==B?
查看>>
Flink独立集群1
查看>>
iOS 8 地图
查看>>
20165235 第八周课下补做
查看>>
[leetcode] 1. Two Sum
查看>>
iOS 日常工作之常用宏定义大全
查看>>
PHP的SQL注入技术实现以及预防措施
查看>>
MVC Razor
查看>>
软件目录结构规范
查看>>
Windbg调试Sql Server 进程
查看>>
linux调度器系列
查看>>