JavaScript中的事件模型
JS中的事件
1、鼠标事件
onclick ondbclick onmouseover onmouseout
2、HTML事件
onload onunload onsubmit onresize onfocus onchange onscroll
3、键盘事件
- onkeydown:键盘按下时触发
- onkeypress:键盘按下并抬起的瞬间触发
- onkeyup:键盘抬起时触发
【注意事项】
- ① 执行顺序:keydown--keypress--keyup
- ② keypress只能捕获数字、字母、符号键,不能捕获功能键;
- ③ 长按时循环执行:keydown--keypress
- ④ 有keydown,不一定有keyup,当长按时焦点失去时,不再触发keyup.
- ⑤ keypress区分字母大小写,keydown/keyup不区分大小写
4、事件因子
当触发一个事件时,该事件将向事件所调用的函数中,默认传入一个参数,这个参数就是事件因子,包含了事件的各种详细信息。
document.onkeydown=function(e){
console.log(e);
}
5、如何确定键盘按键
- ① 在触发函数中,接收事件因子e
e = e || window.event;
- ② 可以使用 e.key直接取到按下的按键字符(不推荐)
- ③ 可以使用keyCode/which/charCode取到按键的ASCII码值:
var code=e.keyCode || e.which || e.charCode;
//(兼容各种浏览器的写法)
document.onkeydown=function(e){
e = e || window.event;
var code=e.keyCode || e.which || e.charCode;
console.log(e);
}
DOM0事件模型
1.内联模型绑定 (行内绑定)
将函数名直接作为HTML标签中事件属性的属性值
<button onclick="func()">内联模型绑定</button>
缺点:不符合w3c中关于内容与行为分离的基本规范
2.脚本模型(动态绑定)
通过在js中选中某个节点,然后给节点添加onclick属性
document.getElementById("btn1").onclick=function(){}
优点:符合w3c中内容与行为分离的基本规范,实现html与js的分离
3.DOM0共有的缺点:
DOM2事件模型
1.添加DOM2事件绑定
① IE8之前,使用.attachEvent("onclick",函数);
② IE8之后,使用.addEventListener("click",函数,true/false);
参数三:false(默认)表示事件冒泡,传入true表示事件捕获
③ 兼容所有浏览器的处理方式
var btn = document.getElementById("btn2");
if(btn.attachEvent) {
btn.attachEvent("onclick", func1);
} else {
btn.addEventListener("click", func1);
}
2.DOM2的优点:
① 同一个节点,可以使用DOM2绑定多个同类型事件
② 使用DOM2绑定的事件,有专门的函数取消
3.DOM2取消事件绑定:
① 使用attachEvent绑定,用detachEvent("onclick",func1);取消
② 使用addEventListenner绑定,用removeEventListener("click",func1);取消
document.getElementById("btn3").onclick=function() {
if(btn.detachEvent) {
btn.detachEvent("onclick", func1);
} else {
btn.removeEventListener("click", func1);
}
alert("取消事件绑定");
}
注意: 如果是DOM2绑定的事件需要取消,则绑定事 时,回掉函数必须是函数名,而不能是匿名函数,因为取消事件时,,取消传入函数名进行绑定
js中的事件流模型
1.事件冒泡:
直到DOM根节点 。
2.事件捕获
知道当前节点自身 。
3.什么时候事件冒泡?事件捕获?
①当使用addEventListener绑定事件,第三个参数设为true时表示事件捕获
②除此之外的所有事件均为事件冒泡
4.阻止事件冒泡
①IE10之前,使用e.cancelBubble = true;
②IE10之后,使用 e.stopPropagation();
function myParagraphEventHandler(e) {
e = e || window.event;
if (e.stopPropagation) {
e.stopPropagation(); //IE10之后
} else {
e.cancelBubble = true; //IE10之前
}
}
5.阻止默认事件
①IE10之前:e.returnValue = false;
②IE10之后:e.stopPropagation();
function eventHandler(e) {
e = e || window.event;
// 防止默认行为
if (e.preventDefault) {
e.preventDefault(); //IE10之外
}else {
e.returnValue = false; //IE10之前
}
}
JavaScript中的事件模型的更多相关文章
- 说说JavaScript中的事件模型
1.javascript中为元素添加事件处理程序的方法有以下几种方式,可以为javascript元素添加事件处理程序 (1) 直接将事件处理代码写在html中(2) 定义一个函数,赋值给html元素的 ...
- 理解javascript中的事件模型
javascript中有两种事件模型:DOM0,DOM2.而对于这两种的时间模型,我一直不是非常的清楚,现在通过网上查阅资料终于明白了一些. 一. DOM0级事件模型 DOM0级事件模型是早期的事件 ...
- 深入理解javascript中的事件循环event-loop
前面的话 本文将详细介绍javascript中的事件循环event-loop 线程 javascript是单线程的语言,也就是说,同一个时间只能做一件事.而这个单线程的特性,与它的用途有关,作为浏览器 ...
- javascript 中的事件机制
1.javascript中的事件. 事件流 javascript中的事件是以一种流的形式存在的. 一个事件会也有多个元素同时响应. 有时候这不是我们想要的效果, 我们只是需要某个特定的元素相应我们的绑 ...
- JavaScript中的事件对象
JavaScript中的事件对象 JavaScript中的事件对象是非常重要的,恐怕是我们在项目中使用的最多的了.在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含这所有与事件有 ...
- JavaScript 进阶教程一 JavaScript 中的事件流 - 事件冒泡和事件捕获
先看下面的示例代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Jav ...
- 了解javascript中的事件(二)
本文目录如下: 零.寒暄 一.事件的分类 二.事件代理 2.1 问题引出 2.2 什么是事件代理 2.3 完整示例 二.事件代理 三.事件代理思想的用处 四.总结 零.寒暄 这篇博客本该出现在两个月以 ...
- javascript中onclick事件能调用多个方法吗
Q: javascript中onclick事件能调用多个方法吗? A: 可以的,方法如下onclick="aa();bb();cc();"每个方法用“;”分号隔开就行了
- js实例分析JavaScript中的事件委托和事件绑定
我们在学习JavaScript中,难免都会去网上查一些资料.也许偶尔就会遇到“事件委托”(也有的称我“事件代理”,这里不评论谁是谁非.以下全部称为“事件委托”),尤其是在查JavaScript的事件处 ...
随机推荐
- Sublime Text3 运行Python 出现Error:Decode error - output not utf-8
问题描述: Sublime Text 3 在build Python时,如果python源代码输出有中文,例如"print('中文')",Sublime Text 会报 [Deco ...
- SpringBoot(七):集成DataSource 与 Druid监控配置
绑定DataSource:Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource,Druid是Java语言中最好的数据库连接池,并且能够提供 ...
- WPF利用附加属性修改ShowGridLines效果
1.思路主要代码 wpf的gridline原本效果是虚线类型的.有时候需要设计成表格形式的,因此有了用附加属性来自动绘制边框线的想法. 思路:绘制Line并添加到grid的children里,但效果并 ...
- SpringBoot中@ManyToMany的坑
我在User表中添加了manytomany的外键映射 @ManyToMany(fetch=FetchType.EAGER) @JoinTable(name="user_role", ...
- 初试GH-OST
最近老板让做一个gh-ost和pt-osc 的对比测试,本文将对两者做对比. 一.原理和所用说明 PT-OSC GH-OST 原理 1.创建一个和要执行 alter 操作的表一样的新的空表结构(是 ...
- jQuery系列 第六章 jQuery框架事件处理
第六章 jQuery框架事件处理 JavaScript以事件驱动来实现页面的交互,其核心是以消息为基础,以事件来驱动.虽然利用传统的JavaScript事件处理方式也能够完成页面交互,但jQuery框 ...
- Java 嵌套类基础详解
目录 1. 什么是嵌套类? 2. 为什么要使用嵌套类? 3. 嵌套类的类型 4. 静态嵌套类 5. 非静态嵌套类 5.1 成员内部类 5.2 局部内部类 5.3 匿名内部类 6. 嵌套接口 1. 什么 ...
- EntityFramework Core 学习系列(一)Creating Model
EntityFramework Core 学习系列(一)Creating Model Getting Started 使用Command Line 来添加 Package dotnet add pa ...
- SRM 558 SurroundingGame
题意: 给定一个网格,每个网格有选取代价和占据收益.每个点被占据,需要满足以下两个条件至少一个条件:1.被选取 2.邻近方格都被选取(有公共边被称为邻近) 不一定要占据所有方格,求最大收益. 输入 ...
- 计蒜客NOIP模拟赛(2) D2T3 银河战舰
[问题描述] 瑞奥和玛德利德是非常好的朋友.瑞奥平时的爱好是吹牛,玛德利德的爱好是戳穿瑞奥吹的牛. 这天瑞奥和玛德利德来到了宇宙空间站,瑞奥向玛德利德炫耀这个空间站里所有的银河战舰都是自己 ...