DOM的事件
来源:互联网 发布:网络管理零基础知乎 编辑:程序博客网 时间:2024/06/05 06:34
一、事件绑定
要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数。所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称。它是事件驱动编程模式的主要编程方式
在JavaScript中,有三种常用的绑定事件的方法:
- 在DOM元素中直接绑定;
- Element节点的事件属性; //DOM0级事件处理程序
- 绑定事件监听函; //DOM2级事件处理程序
在DOM元素中直接绑定(HTML的on-属性)
在HTML中,我们可以在DOM元素上绑定onclick、onmouseover、onmouseout、onmousedown、onmouseup、ondblclick、onkeydown、onkeypress、onkeyup等
<div onclick="test()"><script>fucntion test(){ alert("Hello World");}</script>
使用这个方法,只会在冒泡阶段触发。
使用这种方法时,on-属性的值是将会执行的代码,而不是一个函数。
Element节点的事件属性(在JavaScript代码中绑定事件)
在JavaScript代码中(即script标签内)绑定事件可以使JavaScript代码与HTML标签分离,文档结构清晰,便于管理和开发。
<div id="test"><script>var div = document.getElementById("test");div.onclick = function(){ console.log('Hello World');};</script>
使用这个方法,只会在冒泡阶段触发。
使用事件监听绑定事件(addEventListener方法)
3个事件阶段
关于事件监听,W3C规范中定义了3个事件阶段,依次是捕获阶段、目标阶段、冒泡阶段。
- 第一阶段:从window对象传导到目标节点,称为“捕获阶段”(capture phase)。
- 第二阶段:在目标节点上触发,称为“目标阶段”(target phase)。
- 第三阶段:从目标节点传导回window对象,称为“冒泡阶段”(bubbling phase)。
EventTarget接口
DOM的事件操作(监听和触发),都定义在EventTarget接口。Element节点、document节点和window对象,都部署了这个接口。
该接口定义了三个方法:
- addEventListener:绑定事件的监听函数
- removeEventListener:移除事件的监听函数
- dispatchEvent:触发事件
addEventListener:
用于在当前节点或对象上,定义一个特定事件的监听函数。(同一节点可以绑定多个事件)
element.addEventListener(event, function, useCapture)
- event : (必需)事件名,支持所有 DOM事件 。
- function:(必需)指定要事件触发时执行的函数。
useCapture:(可选)指定事件是否在捕获或冒泡阶段执行。true,捕获。false,冒泡。默认false。
function test() { console.log('Hello world');}var div = document.getElementById('test');div.addEventListener('click', test, false);
removeEventListener:
用来移除addEventListener方法添加的事件监听函数。(可以解除相应的绑定)
div.addEventListener('click', listener, false);div.removeEventListener('click', listener, false);
dispatchEvent:
在当前节点上触发指定事件,从而触发监听函数的执行。(后面会细讲)
二、事件委托
事件委托就是利用冒泡的原理,把事件加到父元素或祖先元素上,触发执行效果。
1.可提高JavaScript性能
<ul id="list"> <li id="item1" >item1</li> <li id="item2" >item2</li> <li id="item3" >item3</li></ul><script>var item1 = document.getElementById("item1");var item2 = document.getElementById("item2");var item3 = document.getElementById("item3");document.addEventListener("click",function(event){ var target = event.target; if(target == item1){ alert("hello item1"); }else if(target == item2){ alert("hello item2"); }else if(target == item3){ alert("hello item3"); }})</script>
2.事件委托可用于对动态添加的元素动态的添加事件:
<ul id="list"> <li id="item1" >item1</li> <li id="item2" >item2</li> <li id="item3" >item3</li></ul><script>var list = document.getElementById("list");document.addEventListener("click",function(event){ var target = event.target; if(target.nodeName == "LI"){ alert(target.innerHTML); }})var node = document.createElement("li");node.id = "item4";var textnode = document.createTextNode("item4");node.appendChild(textnode);list.appendChild(node);</script>
三、自定义事件
通常情况下,事件的触发都是由用户的行为如点击、刷新等操作实现,但是,其实有的情况下,事件的触发必须又程序来实现。
dispatchEvent是作为高级浏览器(如chrome、Firfox等)的事件触发器来使用的。
document.createEvent();// 创建event.initEvent();// 初始化element.dispatchEvent();// 触发
createEvent参数:HTMLEvents,MouseEvents,UIEvents
initEvent(eventName, canBubble, preventDefault)。分别表示事件名称,是否可以冒泡,是否阻止事件的默认操作。
dispatchEvent()就是触发执行了,dom.dispatchEvent(eventObject), 参数eventObject表示事件对象,是createEvent()方法返回的创建的Event对象。
例子:$(dom).addEvent("alert", function() { alert("Holle World");});var evt = document.createEvent("HTMLEvents");evt.initEvent("alert", false, false);dom.dispatchEvent(evt);
- 常见的DOM事件
- DOM事件的处理
- JavaScript的dom事件
- DOM事件的处理
- DOM的事件
- 标准DOM的事件监听
- DOM的事件对象event
- 【浅谈DOM事件的优化】
- 分享常见的DOM事件
- jQuery的DOM事件总结
- html内的Dom事件
- jQuery的DOM事件总结
- DOM事件
- DOM 事件
- DOM 事件
- DOM事件
- dom事件
- dom事件
- struts.xml配置文件启用开发者模式
- FZU
- 复试计划篇(上)
- 2D图形编程指南
- C# winform 为按钮添加键盘快捷键
- DOM的事件
- 【POJ 3264】Balanced Lineup(RMQ算法||线段树)
- Go语言学习之cgo(golang与C语言相互调用)
- jQuery实现水平和垂直居中
- 解决Dojo中id is already registry的问题
- Linux定时任务Crontab命令详解
- 测试
- Spring(19)——Profile(二)
- zzuli2173: GJJ的日常之玩游戏