事件流:

事件流--描述的是从页面中接受事件的顺序

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事件处理程序-事件对象-键盘事件的更多相关文章

  1. HTML事件处理程序---内联onclick事件

    HTML事件处理程序绑定方法: <input type="button" value="click me" onclick="show(this ...

  2. 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 ...

  3. ActionsChains类鼠标事件和Keys类键盘事件

    一.鼠标事件 如,移动.点击.释放.单击.右击,拖动等 键盘事件如:输入.回车.粘贴.复制.剪贴等 使用ActionsChains类和Keys类之前都必须先导入       from selenium ...

  4. 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 ...

  5. 深入理解DOM事件类型系列第二篇——键盘事件

    × 目录 [1]类型 [2]顺序 [3]按键信息[4]应用 前面的话 鼠标和键盘是电脑端主要的输入设备,上篇介绍了鼠标事件,本文将详细介绍键盘事件 类型 键盘事件用来描述键盘行为,主要有keydown ...

  6. dom事件与event对象总结

    1 事件:就是文档或浏览器窗口中发生的一些特定的交互瞬间.    tips:js和xhtml的交互是通过当用户或浏览器操作网页时发生的事件来处理的. 1.1 事件流:即事件的顺序.        事件 ...

  7. JavaScript 事件 事件流 事件对象 事件处理程序 回调函数 error和try...catch和throw

    参考资料: 慕课网 DOM事件探秘    js事件对象 处理 事件驱动: JS是采用事件驱动的机制来响应用户操作的,也就是说当用户对某个html元素进行操作的时候,会产生一个时间,该时间会驱动某些函数 ...

  8. JavaScript Event 事件 事件流 事件对象 事件处理程序 回调函数 error和try...catch和throw

    参考资料: 慕课网 DOM事件探秘    js事件对象 处理 事件驱动: JS是采用事件驱动的机制来响应用户操作的,也就是说当用户对某个html元素进行操作的时候,会产生一个事件,该事件会驱动某些函数 ...

  9. 深入理解DOM事件机制系列第二篇——事件处理程序

    × 目录 [1]HTML [2]DOM0级 [3]DOM2级[4]IE[5]总结 前面的话 事件处理程序又叫事件侦听器,实际上就是事件的绑定函数.事件发生时会执行函数中相应代码.事件处理程序有HTML ...

随机推荐

  1. UIButton上图片和文字的位置调整

    UIButton 上默认是图片在左文字在右,而大多数情况这样默认的的显示形式都不能满足我们的需求,接下来我就这个问题分享一下我的心得. 默认情况下,不设置的效果,都是居中实现 UIButton *bu ...

  2. JQuery实现隔行变色和突出显示当前行 效果

    运行效果如下图: jquery关键代码: <script type="text/javascript"> //该文件为:js.js // 当鼠标移到表格上是,当前一行背 ...

  3. Python 学习日记(第四周)

    set数据类型 先用一行代码来说明一下 #!/usr/bin/env python s2={} s = {33,12,33,32121} for i in s: print(i) print(type ...

  4. Python新手学习基础之数据类型——字符串的切片截取

    切片截取是python中字符串常见的一些操作,我们会在这篇文章里详细介绍,切片截取的作用是获取子字符或子字符串. 实际上,我们要做的就是使用索引,用冒号分隔两个索引,形式为:变量[头下标:尾下标],冒 ...

  5. map关联容器

    #include<map> map<k, v> m; 创建一个名为 m 的空 map 对象,其键和值的类型分别为 k 和 v map<k, v>m(m2);创建 m ...

  6. Spark问题记录

    Spark 多线程时的序列化问题  临时记录 Exception in thread "Thread-28" org.apache.spark.SparkException: Ta ...

  7. Linux/Unix工具与正则表达式的POSIX规范

    http://www.infoq.com/cn/news/2011/07/regular-expressions-6-POSIX 对正则表达式有基本了解的读者,一定不会陌生『\d』.『[a-z]+』之 ...

  8. Feedly订阅Blog部落格RSS网摘 - Blog透视镜

    网络信息爆炸的时代,如何更有效率地阅读文章,订阅RSS网摘,可以快速地浏览文章标题,当对某些文章有兴趣时,才点下连结连到原网站,阅读更详细的文章,Feedly Reader阅读器除了提供在线版订阅RS ...

  9. documentElement vs body区别

    documentElement.scrollTop------>0因为,他包含head, body body.scrollTop------------------>才是正确的 scrol ...

  10. cf C. Sereja and Algorithm

    http://codeforces.com/contest/368/problem/C 从左向右记录从1位置到每一个位置上x,y,z的个数.然后判断在l,r区间内的x,y,z的关系满不满足abs(x- ...