js 之二 事件对象
事件对象
/当事件的响应函数被触发时,浏览器每次都会讲一个事件对象作为实参传递响应函数; 在事件对象中封装了当前事件相关的一切信息,比如:鼠标的,键盘的操作
// 当鼠标在areaDiv中移动时,在showMsg中显示坐标-->
<!-- var areaDiv =document.getElementById("areaDiv");-->
<!-- var showMsg =document.getElementById("showMsg");-->
<!-- // onmousemove事件在鼠标在元素中移动时触发-->
<!-- // 事件对象:当事件的响应函数被触发时浏览器每次会将一个事件对象作为实参传递进响应函数-->
<!-- // 在事件对象中封装了当前事件相关的一切信息,比如,鼠标坐标,键盘哪个键按下......详见https://www.runoob.com/jsref/dom-obj-event.html-->
<!-- areaDiv.onmousemove = function(event){-->
<!-- // clientX获取水平座标,clientY获取垂直坐标-->
<!-- // alert(event.clientX+" "+event.clientY) -->
<!-- showMsg.innerHTML = "x = "+ event.clientX + ",y = "+ event.clientY-->
<!-- }-->
事件冒泡
//事件的冒泡(bubble):事件的向上传导,当后代元素的事件被触发,祖先元素的相同事件也会被触发
//在开发中大部分情况冒泡都是有用的,如果不希望发生事件冒泡可以通过事件对象取消冒泡
```<script type="text/javascript">
//事件的冒泡(bubble):事件的向上传导,当后代元素的事件被触发,祖先元素的相同事件也会被触发
//在开发中大部分情况冒泡都是有用的,如果不希望发生事件冒泡可以通过事件对象取消冒泡
var s1 =document.getElementById("s1");
s1.onclick = function(e){
alert("s1")
// 取消冒泡
e.cancelBubble = true;
}
var box1 =document.getElementById("box1");
box1.onclick = function(){
alert("box1")
}
document.body.onclick = function(){
alert("body")
}
</script>

#### 事件的委派
要解决事件利用冒泡特性提成开发性能引发,点击事件不可控的问题
//当事件统一绑定元素共同祖先元素,这样当后代事件触发时,会一直冒泡到祖先元素,从通过祖先元素处理的事件,事件委派利用冒泡,通过委派可以减少事件绑定的次数,提交程序性能
event.target 获取触发的对象
this:是当前的对象 可以通过打印就出来
#### 事件的绑定
要解决一个绑定对象要触发多个事件处理函数的问题;通过 addEventistener()给元素绑定响应函数
<script type="text/javascript">
var btn01 =document.getElementById("btn01");
var btn02 =document.getElementById("btn02");
// 使用对象.事件 = 函数的形式只能绑定一个响应函数
btn01.onclick = function(){
alert("1");
}
// 为btn01绑定第二个响应函数会覆盖掉前一个
btn01.onclick = function(){
alert("2");
}
// addEventListener(时间的字符串不要on,回调函数,是否在捕获阶段触发事件一般都传false)也可以绑定响应函数
// addEventListener()可同时绑定多个响应函数,事件触发时会根据函数绑定顺序执行
btn02.addEventListener("click",function(){
alert("1");
},false)
btn02.addEventListener("click",function(){
alert("2");
},false)
</script>
#### 事件的传播
<script type="text/javascript">
var box1 =document.getElementById("box1");
var box2 =document.getElementById("box2");
var box3 =document.getElementById("box3");
// 事件的传播:1.捕获阶段:从祖先元素向目标元素进行事件的捕获,但是默认此时不会触发事件 2.目标阶段:事件捕获到目标元素,捕获结束在目标元素上触发事件 3.冒泡阶段:事件从目标元素向祖先元素传递,依次触发祖先元素上的事件
// 如果希望在捕获阶段就触发事件,可以将addEventListener第三个参数改成true,一般情况下不会希望在捕获阶段执行事件
box1.addEventListener("click",function(){
alert("box1")
},false)
box2.addEventListener("click",function(){
alert("box2")
},true)
box3.addEventListener("click",function(){
alert("box3")
},false)
</script>

js 之二 事件对象的更多相关文章
- JS中的事件&对象
一.JS中的事件 (一)JS中的事件分类 1.鼠标事件 click/dblclick/onmouseover/onmouseout 2.HTML事件 onload/onscroll/onsubmit/ ...
- JS中的事件(对象,冒泡,委托,绑定)
- 事件,是文档或浏览器窗口中发生的一些特定的交互瞬间,JS与HTML之间的交互是通过事件实现的 对于web应用来说,有下面这些代表性事件:点击事件,鼠标移动,按下键盘等等 - 事件,是用户和浏览器之 ...
- js跨浏览器事件对象、事件处理程序
项目中有时候会不用jquery这么好用的框架,需要自己封装一些事件对象和事件处理程序,像封装AJAX那样:这里面考虑最多的还是浏览器的兼容问题,原生js封装如下:var EventUtil={ //节 ...
- js中获取事件对象的方法小结
原文地址:http://jingyan.baidu.com/article/d8072ac4594d6cec95cefdac.html 事件对象 的获取很简单,很久前我们就知道IE中事件对象是作为全局 ...
- 和我一起理解js中的事件对象
我们知道在JS中常用的事件有: 页面事件:load: 焦点事件:focus,blur: 鼠标事件:click,mouseout,mouseover,mousemove等: 键盘事件:keydown,k ...
- js事件处理、事件对象
事件类型分类: 1 添加在html结构中的事件 <div id="div1" onclick="alert('append click event in html' ...
- JS基础(二)事件监听练习之table鼠标悬停行变色
JS监听事件简单学习: [object].addEvent("事件类型","处理函数","冒泡事件或捕获事件"); [object].r ...
- 【js】event(事件对象)详解
1.事件对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 什么时候会产生Event 对象呢? 例如: 当用户单击某个元素的时候,我们给这个元 ...
- js的event事件对象汇总
JavaScript事件对象是浏览器默认传入的,但是对于浏览器的兼容问题,我们需要对事件对象进行兼容.但是jQuery已经帮我们解决了所有兼容性的问题,并且给我们添加了很多有用的方法.已经是比较历史的 ...
- JS HTML DOM 事件对象(onclick、onmouseenter)
HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序. 事件通常与函数结合使用,函数不会在事件发生前被执行! (如用户点击按钮). HTML DOM 事件 DOM: ...
随机推荐
- 10 个杀手级的 Python 自动化脚本
重复性任务总是耗时且无聊,想一想你想要一张一张地裁剪 100 张照片或 Fetch API.纠正拼写和语法等工作,所有这些任务都很耗时,为什么不自动化它们呢?在今天的文章中,我将与你分享 10 个 P ...
- MyBatisPlus 整合 SpringBoot 遇见的问题(一)
[异常]:UnsatisfiedDependencyException: Error creating bean with name 'xxx[类]': Unsatisfied dependency ...
- 在java中new一个对象的流程是什么?
Dog dog=new Dog()背后执行过程 这个涉及到字节码文件结构,类加载机制,堆,栈的认识等知识点. 在执行new的时候可以大致分为二个过程,初始化以及实例化,初始化就是类的加载过程,首先我们 ...
- 剑指 offer 第 1 天
第 1 天 栈与队列(简单) 剑指 Offer 09. 用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部 ...
- c#动态执行字符串脚本(优化版)
像javascript中有eval()来执行动态代码,c#中是没有的,于是自己动手丰衣足食, 先来代码 1 using System; 2 using System.Data; 3 using Sys ...
- Win系统下的免杀思路(总结非教程)
1.简介 在安全厂商日趋成熟的背景下,编写免杀马的难度和成本日益增长.好用新兴的开源项目在短时间内就被分析并加入特征库.笔者调研了部分开源项目,其中也有项目做了类似的分析 [1],目前能够免杀的项目初 ...
- 图与网络分析—R实现(四)
三 最短路问题 最短路问题(short-path problem)是图论理论的一个经典问题.寻找最短路径就是在指定网络中两结点间找一条距离最小的路.最短路不仅仅指一般地理意义上的距离最短,还可以引申到 ...
- 二进制安装Kubernetes(k8s) v1.21.13 IPv4/IPv6双栈
二进制安装Kubernetes(k8s) v1.21.13 IPv4/IPv6双栈 Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes二进制安装 后续尽可能第一时间更 ...
- 太坑了吧!一次某某云上的redis读超时排查经历
一次排查某某云上的redis读超时经历 性能排查,服务监控方面的知识往往涉及量广且比较零散,如何较为系统化的分析和解决问题,建立其对性能排查,性能优化的思路,我将在这个系列里给出我的答案. 问题背景 ...
- 创建SpringBoot项目,在yml中配置数据库, driver-class-name: com.mysql.cj.jdbc.Driver标红报错解决方式
一.报错原因 com.mysql.cj.jdbc.Driver一直标红报错,原因在于pom.xml中mysql包没有下载下来,或者在创建项目的时候有问题 二.解决方案 在pom.xml添加 <d ...