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 ...
随机推荐
- javascript获取标签样式(获取背景为例)
function getStyle(el){ if(window.getComputedStyle){ return window.getComputedStyle(el,null); } retur ...
- spring项目中监听器作用-ContextLoaderListener(项目启动时,加载一些东西到缓存中)
作用:在启动Web容器时,自动装配Spring applicationContext.xml的配置信息. 因为它实现了ServletContextListener这个接口,在web.xml配置这个监听 ...
- 深入研究MiniMVC之后续篇
今天在园子看到<深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的>之后,本来是不打算开博来续这个后传,不过,在那边回了个评论之后, ...
- PYTHON-进阶-ITERTOOLS模块
PYTHON-进阶-ITERTOOLS模块小结 这货很强大, 必须掌握 文档 链接 pymotw 链接 基本是基于文档的翻译和补充,相当于翻译了 itertools用于高效循环的迭代函数集合 组成 总 ...
- VC2013 添加库文件
1.项目--〉属性--〉链接器 1. You #include the header file (.h) file in your project as necessary. 2. You lis ...
- IIC协议总结
1.起始和停止条件: 起始信号:时钟线SCL为高电平时,数据线SDA从高电平拉到低电平,表示通信开始. 停止信号:时钟线SCL为高电平时,数据线SDA从低电平拉到高电平,表示通信结束. 2.时钟线的上 ...
- Json数据转换
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- iOS开发 自定义navigationleftItem 之后手势失效的问题
@property (nonatomic, strong) UIViewController *currentShowVC; //设置代理 self.navigationController.inte ...
- 关于MPLS协议几个容易忽略的点
1.随着硬件技术的进步,产生了高速路由器和三层交换机,MPLS提高转发的速度的初衷已经没有多少意义.但是MPLS由于其支持标签栈和面向连接的特点,使其在虚拟专用网,流量工程,QoS等方面得到广泛的应用 ...
- Codeforces 163A Substring and Subsequence
http://codeforces.com/problemset/problem/163/A?mobile=true 题目大意:给出两个串,问a的连续子串和b的子串(可以不连续)相同的个数. 思路:在 ...