事件流:

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

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. android上line-height的问题

    关于line-height大家应该非常熟悉了吧,就是用来做垂直居中的,屡试不爽,基本上没有什么问题,但是最近一个项目,测试提了一个bug,看图吧. 从别处窃的图,这个问题只有安卓上才能复现,做了dem ...

  2. ZOJ3558 How Many Sets III(公式题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud How Many Sets III Time Limit: 2 Seconds   ...

  3. ./configure 时候报错c++ 编译器不能执行

    ./configure时报错:configure: error: C++ compiler cannot create executables .哎,今天重装测试服务器上的系统,设置好IP可以远程访问 ...

  4. A + B Problem,hdu-1000

    A + B Problem Problem Description Calculate A + B.   Input Each line will contain two integers A and ...

  5. code first 尝试

    建表: 1.先用EF连接数据库,配置connectionStrings <configSections> <!-- For more information on Entity Fr ...

  6. Anisotropic gauss filter

    最近一直在做版面分析,其中文本行检测方面,许多文章涉及到了Anigauss也就是各向异性高斯滤波. 顾名思义,简单的理解就是参数不同的二维高斯滤波. 在文章Fast Anisotropic Gauss ...

  7. angularjs中{{}} 加载出现闪烁问题

    在head标签中加入 [ng-cloak] { display: none !important; } 在页面的body标签上添加 ng-cloak 可以解决页面上先后加载闪烁问题

  8. iOS开发:自定义tableViewCell处理的问题

    还在适配iOS6,索性下一个版本不适配了~~~~~ 问题: *** Assertion failure in -[ PCDiaryDetailReplyCell layoutSublayersOfLa ...

  9. gtest以及测试小结

    所有的测试,都是让未知的东西和已知的东西进行比较,如果测试结果和预期的一样,那么就认为被测对象是OK的否则视为有问题. python的单元测试是写一堆继承了unittest.TestCase类,每个类 ...

  10. 对拍 For Linux

    #!/bin/sh g++ -g gene.cpp -o gene g++ -g a.cpp -o a g++ -g b.cpp -o b while true; do  ./gene > in ...