js事件处理、事件对象

事件类型分类:

1 添加在html结构中的事件

<div id="div1" onclick="alert(‘append click event in html‘)"> </div>

点击div1之后弹出 append click event in html;其实在html结构中添加的事件也属于dom0级事件。

2 dom0级事件处理

<div id="div1"> </div>
<script>
    var dom1 = document.getElementById(‘div1‘);
    dom1.onclick = function(){alert(‘ first dom0 ‘)};
    dom1.onclick = function(){alert(‘ second dom0 ‘)};
</script>

点击div1之后只弹出 second dom0;说明dom0级事件后面赋值的事件会覆盖掉前面的

如果在div中在加 onclick="alert(‘append click event in html‘), 代码如下:

<div id="div1" onclick="alert(‘append click event in html‘)"> </div>
<script>
    var dom1 = document.getElementById(‘div1‘);
    dom1.onclick = function(){alert(‘ first dom0 ‘)};
    dom1.onclick = function(){alert(‘ second dom0 ‘)};
</script>

点击div后 仍然只弹出second dom0, 说明在html中添加的点击事件处理程序也被覆盖。

实际上 dom1.onclick 等价于html结构中div标签中的onclick=""; 可以把onclick看成dom元素对象的一个属性 dom1{ id:"1", onclick:function(){ ... } }

3 dom2级事件处理

dom.addEventListener(“事件名”,“事件处理程序”,“布尔值”)

布尔值表示该事件的响应顺序,默认值为false。

true:事件捕获:表示在捕获阶段调用事件处理程序。

false:事件冒泡:表示在冒泡阶段调用事件处理程序。

事件冒泡或事件捕获?
事件传递有两种方式:冒泡与捕获。
事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?
在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。
在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。

使用addEventListener添加事件不会被覆盖也不会覆盖dom0级事件,如下:

<div id="div1" onclick="alert(‘append click event in html‘)"> </div>
<script>
    var dom1 = document.getElementById(‘div1‘);
    var handle = function () {
        alert(‘dom2 event handle‘);
    };
    dom1.onclick = function(){alert(‘ first dom0 ‘)};
    dom1.onclick = function(){alert(‘ second dom0 ‘)};
    dom1.addEventListener("click", function(){alert(‘ first dom2 ‘)}, false);
    dom1.addEventListener("click", handle, false);
</script>

点击div1时弹出 second dom0、first dom2 、dom2 event handle ,dom0级绑定的最后一个事件覆盖了前面所有的dom0级事件,而绑定的两个dom2级事件都存在。

使用removeEventListener移除事件,传入的参数与添加处理程序时addEventListener使用的参数相同。

这也意味着事件处理程序为匿名函数的无法移除,如下所示:

<div> </div>
<script>
    var dom1 = document.getElementById(‘div1‘);
    var handle = function () {
        alert(‘event handle‘);
    };
    dom1.addEventListener("click", function(){alert(‘ first dom2 ‘)}, false);
    dom1.addEventListener("click", function(){alert(‘ second dom2 ‘)}, false);
    dom1.addEventListener("click", handle, false);
    dom1.removeEventListener("click", handle, false);
    dom1.removeEventListener("click", function(){alert(‘ second dom2 ‘)}, false);
</script>

点击div1依次弹出 first dom2 、second dom2

注意: IE8及更早IE版本,Opera7.0及其更早版本不支持 addEventListener() 和 removeEventListener() 方法。

对于这类浏览器版本可以使用 attachEvent() 方法来添加事件,detachEvent() 方法来移除事件句柄

事件对象:在触发dom事件的时候都会产生一个事件对象

事件对象event:

1) type:获取事件类型

2) target:获取事件目标

3) stopPropagation():阻止事件冒泡

4) preventDefault():阻止事件默认行为

<div id="div1"> </div>
<script>
    var dom1 = document.getElementById(‘div1‘);
    dom1.addEventListener("click",function(event){console.log(event.type);console.log(event.target)})
</script>

console.log 输出: click , <div id="div1"> </div>

<div><a></a></div>
<script>
    dom_div.addEventListener("click",fun_div)
    dom_a.addEventListener("click",fun_a)
</script>

点击a时触发fun_a 由于事件冒泡再触发fun_div

在fun_a的末尾添加event.stopPropagation():阻止事件冒泡 则div中的click事件fun_div无效

<a href="http://www.baidu.com"></a>

dom_1.addEventListener("click",function(event){}) 点击之后a会跳转到百度 在回调函数function中添加event.preventDefault();阻止事件默认行为 点击之后不会跳转

时间: 2024-10-05 23:28:35

js事件处理、事件对象的相关文章

JS基础——事件对象event

事件为什么会是对象呢?先了解一下事件处理 一.事件处理 JS在事件处理函数中提供了事件对象,帮助处理鼠标和键盘事件.同时还可以修改一些事件的捕获和冒泡流的函数. 事件处理分为三部分:对象.事件处理函数=函数 document.onclick=function(){ alert(this.value); //this代表着在该作用域中离它最近的对象. } 以上事件处理中,document为对象,click是事件处理类型,onclick为事件处理函数.function()为匿名函数,用于触发后执行.

JS 事件对象和事件冒泡

1.事件对象 js的事件对象中保存了当前被触发事件的一些相关的属性信息,如事件源.事件发生时的鼠标位置.事件按键等. 事件对象的获取方法: IE中可以window.event直接获取,而Firefox中则不可以,可通过如下方法获取: 1)var event = window.event || arguments.callee.caller.arguments[0]; 2)通过参数传.function(e) { var event = window.event || e; } 2.事件源 事件源即

JavaScript事件对象EventUtil

JS中事件对象有很多种,兼容性参差不齐,这个对象封装了大部分所需的各种方法 var EventUtil={ addHandler:function(element,type,handler){ //添加事件 if(element.addEventListener){ element.addEventListener(type,handler,false); //使用DOM2级方法添加事件 }else if(element.attachEvent){ //使用IE方法添加事件 element.at

JS DOM基础 事件概述 事件流 事件处理方法 添加监听器 事件类型 事件对象 事件委托

一.事件概述 事件是什么? 在我们的生活中,都会接触到事件这样一个概念,它通常通过描述发生这件事的时间.地点.人物,发生了什么来进行概括. 同样的在javascript也有这样的一个的东西------事件. 页面上发生的事件:鼠标移动.点击.滚动等等. 事件描述了页面上发生的事情,通常它有以下三个要素组成: 事件源:触发事件的元素 事件类型:事件的触发方式(例如鼠标点击或键盘点击) 事件处理程序(事件监听器):事件触发后要执行的代码(函数形式) Javascript 使我们可以动态的去操作一个页

JS事件处理和事件对象

1.HTML事件处理 直接添加到html结构中处理程序属性 <body> <button onclick="demo()">按钮</button> <script> function demo(){ alert("html事件处理"); } </script> </body> 这种html事件处理有很大坏处是修改一处函数名称必须同时修改两处(onclick事件内容也要修改) 2.DOMO级事件处

JS 事件(3)——事件对象

事件对象 在触发DOM节点上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息. DOM中的事件对象 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>事件对象</title> 6 </head> 7 <body> 8 <div id="box"&

js跨浏览器事件对象、事件处理程序

项目中有时候会不用jquery这么好用的框架,需要自己封装一些事件对象和事件处理程序,像封装AJAX那样:这里面考虑最多的还是浏览器的兼容问题,原生js封装如下:var EventUtil={ //节点.事件名.事件处理函数 addHanler:function(element,type,handler){ if(element.addEventListener){ element.addEventListener(type,handler,false);//这里一个参数为false意为在事件冒

javascript不依赖JS加载顺序事件对象实现

背景: 在现在WEB开发中,稍复杂一点的页面,都会涉及到多个模块,尤其是类似seajs.LABjs.requireJS等模块工具出来后,前端开发者分模块开发已经慢慢变成一种习惯了,但是多个模块间的常常有各种交集,需要通信.需要互相调用,这时监听者模式便是必不可少的一种设计模式了,在前端表现事件操作.backbone和jquery都有提供了很好的事件处理方式. 但是,真正开发需求的时候我们常常会遇到文件加载顺序跟事件监听与更新不一致的需求,比如说:在一个视频网站里面,有一个视频处理的JS模块和用户

JavaScript之jQuery-4 jQuery事件(页面加载后执行、事件处理、事件冒泡、事件对象、模拟操作)

一.jQuery 页面加载后执行 代码执行的时机选择 - $(document).ready()方法和 window.onload事件具有相似的功能,但是在执行时机方面是有区别的 - window.onload 事件是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行 - $(document).ready()方法注册的事件处理程序,在DOM完全加载后就可以调用 - 一般来讲, $(document).ready()的执行要优于window.onload事件 - 需要注意的是,