DOM事件处理程序-事件对象-键盘事件
事件流:
事件流--描述的是从页面中接受事件的顺序
IE ---事件冒泡流:即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至最不具体的那个节点(文档)。
Netscape ---事件捕获流:不太具体的节点应该更早接收到事件,而最具体的节点最后接收到事件。
使用事件处理程序:
1. HTML事件处理程序
<input type="button" value="按钮" id="btn" onclick="alert('hello')"/>
<input type="button" value="按钮" id="btn" onclick="showMessage()"/>
<script>
function showMessages(){
alert('hello world!');
}
</script>
// HTML事件的缺点:
// HTML和JS代码紧密的耦合在一起
2. DOM0级事件处理程序
较传统的方式:把一个函数赋值给一个事件的处理程序属性
(用的比较多的方法 简单 跨浏览器的优势)
<input type="button" value="按钮2" id="btn2"/>
<script>
var btn2 = document.getElementById('btn2'); // 取btn2按钮对象
btn2.onclick = function(){
alert('这是通过DOM0级添加的事件!');
}
btn2.onclick = null; // 删除onclick属性
</script> // 没有HTML事件处理程序的缺点
3. DOM2级事件处理程序
DOM2级事件定义了两个方法:
用于处理指定和删除事件处理程序的操作
addEventListener()和removeEventListner()。
接收三个参数:要处理的事件名、作为事件处理程序的函数和布尔值
<input type="button" value="按钮3" id="btn3"/>
<script>
function showMes(){
alert('hello world !')
}
var btn3 = document.getElementById('btn3');
// 可以在一个按钮上添加多个事件
btn3.addEventListener('click',showMes,false);
btn3.addEventListener('click',function(){
alert(this.value);
},false);
// 删除事件
// btn3.removeEventListener('click',showMes,false);
</script>
4. IE事件处理程序
attachEvent()添加事件
detachEvent()删除事件
接收相同的两个参数:事件处理程序的名称和事件处理程序的函数
(不使用第三个参数的原因:IE8以及更早的浏览器版本只支持事件冒泡!)
<input type="button" value="按钮3" id="btn3" />
<script>
function showMes(){
alert('hello world !');
}
var btn3 = document.getElementById('btn3');
btn3.attachEvent('onclick',showMes);
btn3.detachEvent('onclick',showMes);
</script>
5. 跨浏览器的事件处理程序
<input type="button" value="按钮3" id="btn3" />
<script type="text/javascript">
function showMes(){
alert("hello world!");
}
// 跨浏览事件处理程序
var eventUtil = {
// 添加句柄 怎么给元素添加事件
addHandler:function(element,type,handler){
if(element.addEventListener){ // 判断的是DOM2级
element.addEventListener(type,handler,false);
}else if(element.attachEvent){ // IE事件处理程序判断
element.attachEvent("on" + type,handler);
}else{ // DOM0级处理程序判断
element["on" + type] = handler;
}
},
// 删除句柄 怎么给元素删除事件
removeHandler:function(element,type,handler){
if(element.removeEventListener){ // 判断的是DOM2级
element.removeEventListener(type,handler,false);
}else if(element.tetachEvent){ // IE事件处理程序判断
element.tetachEvent("on" + type,handler);
}else{ // DOM0级处理程序判断
element["on" + type] = null;
}
}
}
eventUtil.addHandler(btn3,'click',showMes);
eventUtil.removeHandler(btn3,'click',showMes);
</script>
事件对象:
什么是事件对象?在触发DOM上的事件时都会产生一个对象
事件对象event
1. DOM中的事件对象
1)type属性 用于获取事件类型
2)target属性 用于获取事件目标
3)stopPropagation()方法 用于阻止事件冒泡
4)preventDefault()方法 阻止事件的默认行为
function showMes(event){
alert(event.type); // click
}
function showMes(event){
alert(event.target); // 这个事件加在什么目标上(那个元素的)
alert(event.target.nodeName); // 目标节点名称
}
2. IE中的事件对象
1)type属性 用于获取事件类型
2)srcElement属性 用于获取事件的目标
3)cancelBubble属性 用于阻止事件冒泡
设置为true表示阻止冒泡 设置false表示不阻止冒泡
4)returnValue属性 用于阻止事件的默认行为
设置为true表示阻止事件的默认行为
function showMes(event){
event = event || window.event; // IE8以前的浏览器需要用window.event
var ele = event.target || event.srcElement;
alert(ele);
}
// 跨浏览事件处理程序
var eventUtil = {
// 怎么获取兼容两个浏览器的事件对象
getEvent:function(event){
return event?event:window.event;
},
// 怎么获取事件的类型
getType:function(event){
return event.type;
},
// 怎么获取事件来自于哪个元素
getElement:function(event){
return event.target || event.srcElement;
},
// 怎么阻止取消事件的默认行为
preventDefault:function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false;
}
},
// 怎么阻止事件冒泡
stopPropagation:function(event){
if(event.stopPropagation){ // 以属性的方式来判断
event.stopPropagation();
}else{
event.cancelBubble = true;
}
}
}
键盘事件:
keyDown:当用户按下键盘上的任意键时触发,而且如果按住不放的话,会重复触发此事件
keyPress:当用户按下键盘上的字符键时触发,而且如果按住不放的话,会重复触发此事件
keyUp:当用户释放键盘上的键时触发
event对象上的keyCoden属性用于得到键盘对应键的键码值
console.log(event.keyCode); // 打印keyCode属性
DOM事件处理程序-事件对象-键盘事件的更多相关文章
- HTML事件处理程序---内联onclick事件
HTML事件处理程序绑定方法: <input type="button" value="click me" onclick="show(this ...
- Vue学习之--------事件的基本使用、事件修饰符、键盘事件(2022/7/7)
文章目录 1.事件处理 1.1. 事件的基本使用 1.1.1 .基础知识 1.1.2. 代码实例 1.1.3.测试效果 1.2.事件修饰符 1.2.1. 基础知识 1.2.2 .代码实例 1.2.3 ...
- ActionsChains类鼠标事件和Keys类键盘事件
一.鼠标事件 如,移动.点击.释放.单击.右击,拖动等 键盘事件如:输入.回车.粘贴.复制.剪贴等 使用ActionsChains类和Keys类之前都必须先导入 from selenium ...
- js事件处理程序详解,html事件处理程序,dom0级事件处理程序,dom2级事件处理程序
博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/11/24/js%e4%ba%8b%e4%bb%b6%e5%a4%84%e7%90%86%e ...
- 深入理解DOM事件类型系列第二篇——键盘事件
× 目录 [1]类型 [2]顺序 [3]按键信息[4]应用 前面的话 鼠标和键盘是电脑端主要的输入设备,上篇介绍了鼠标事件,本文将详细介绍键盘事件 类型 键盘事件用来描述键盘行为,主要有keydown ...
- dom事件与event对象总结
1 事件:就是文档或浏览器窗口中发生的一些特定的交互瞬间. tips:js和xhtml的交互是通过当用户或浏览器操作网页时发生的事件来处理的. 1.1 事件流:即事件的顺序. 事件 ...
- JavaScript 事件 事件流 事件对象 事件处理程序 回调函数 error和try...catch和throw
参考资料: 慕课网 DOM事件探秘 js事件对象 处理 事件驱动: JS是采用事件驱动的机制来响应用户操作的,也就是说当用户对某个html元素进行操作的时候,会产生一个时间,该时间会驱动某些函数 ...
- JavaScript Event 事件 事件流 事件对象 事件处理程序 回调函数 error和try...catch和throw
参考资料: 慕课网 DOM事件探秘 js事件对象 处理 事件驱动: JS是采用事件驱动的机制来响应用户操作的,也就是说当用户对某个html元素进行操作的时候,会产生一个事件,该事件会驱动某些函数 ...
- 深入理解DOM事件机制系列第二篇——事件处理程序
× 目录 [1]HTML [2]DOM0级 [3]DOM2级[4]IE[5]总结 前面的话 事件处理程序又叫事件侦听器,实际上就是事件的绑定函数.事件发生时会执行函数中相应代码.事件处理程序有HTML ...
随机推荐
- hdu 1301
最小生成树模板题 简单的prim算法 AC代码: #include <iostream> #include <stdio.h> #define INF 9999999 usin ...
- Python时间戳和日期
import time localtime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) prin ...
- (转)WCF入门教程(一)简介
原文系列来自http://www.cnblogs.com/yank/p/3653160.html 1.WCF是什么? WCF( Windows Communication Foundation), 是 ...
- 页面传值中get和post区别
get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应. post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到 ...
- php+js 瀑布流源码
官方网站:更多源码 新浪微博:QQ公众号 QQ:各种源码 602902342 大牛技术群: 452207697 下载地址:http://pan.baidu.com/s/1bnNipI3 密码: h93 ...
- Codeforces Round #276 (Div. 1)
a. 给俩数, 求他俩之间二进制数中1最多的,有多个输出最小的: 贪心,从小到大加能加就加,最后可能碰到一个不能加了但是当前数比l小,那么就加上这个数,然后从大到小,能减就减,见到符合条件 #incl ...
- IDirect3DDevice9::Clear
在绘制每一帧图形前都要先清空视区,即清空渲染目标表面上的视区矩形的内容:颜色缓冲区.深度缓冲区或者模板缓冲区. HRESULT Clear( [in] DWORD Count, ...
- SQL server 2008无法修改表
长久未使用SQL server,一直都是使用Navicat来处理各种数据库,感觉使用很方便,但由于实际需要,必须要用SQL server创建新的数据库,却意外的遇到了以前从未遇到过的问题. 在建好表以 ...
- IIC 概述之源码仿真
7.1.1 I2C总线简介 1.I2C总线的基本结构 I2C总线由数据线SDA和时钟线SCL构成,每条线都通过上拉电阻接向正电源,所有采用I2C接口标准的器件均并行挂接在总线上,如图7-1所示. I2 ...
- Scala学习笔记--文件IO
补充: http://blog.csdn.net/lyrebing/article/details/20369445 http://developer.51cto.com/art/200907/134 ...