JS学习五(js中的事件)
[JS中的事件分类]
1、鼠标事件
click/bdlclick/onmouseover/onmouseout
2、 HTML事件
onload/onscroll/onsubmit/onchange/onfocus
3、 键盘事件
keydown:键盘按下时触发
keypress:键盘按下并松开时的瞬间触发
keyup:键盘抬起时触发
[注意事项]
①执行顺序:keydown-->keypress-->keyup
②当长按时,会循环执行keydown-->keypress
③有keydown并不一定有keyup,当事件触发过程中,鼠标将光标移走,将导致没有keyup
④keypress只能捕获键盘上的数字、字母、符号键,不能捕获各种功能键,而keydown和keyup可以
⑤keypress支持区分大小写,keydown和keyup并不支持
document.onkeydown = function(){
console.log("onkeydown");
}
document.onkeypress = function(){
console.log("onkeypress");
}
document.onkeyup = function(){
console.log("onkeyup");
}
[确定触发的按键]
①在触发的函数中,传入一个参数e,表示键盘事件
②使用e.keyCode,取到按键的ASCII码值,进而确定触发按键;
③所有浏览器的兼容写法(一般并不需要):
var evn = e || event;
var code = evn.keyCode || evn.which || evn.charCode;
[判断组合按键的方式]
var isEnt = false,isAlt = false;
document.onkeydown = function(e){
if(e.keyCode == 13) isEnt = true;
if(e.keyCode == 18) isAlt = true;
if(isEnt == true && isAlt == true){
console.log("您按了Alt+回车键");
}
}
document.onkeyup = function(e){
if(e.keyCode == 13) isEnt = false;
if(e.keyCode == 18) isAlt = false;
}
[js中的DOM0事件模型]
1、内联模型(行内绑定):直接将函数名作为HTML标签的某个事件属性的属性值;
eg:<button onclick="func()">DOM0内联模型</button>
优点:使用方便。
缺点:违反了w3c关于HTML与JavaScript分离的基本原则;
2、脚本模型(动态绑定):在JS脚本中,取到某个节点,并添加事件属性;
eg:window.onload = function(){}
优点:实现了HTML与JavaScript分离。
缺点:同一个节点只能绑定一个同类型事件。如果绑定多次,最后一个生效。
[DOM2事件模型]
1、添加事件绑定方式:
①在IE8之前:btn.attachEvent("click",函数);
②其他浏览器:btn.addEventListener("click",函数,true/false);
参数三:false(默认)表示事件冒泡
true 表示事件捕获
③兼容写法:if(btn2.attachEvent){
btn2.attachEvent();
}else{
btn2.addEventListener();
}
2、优点: ①可以给同一节点,添加多个同类型事件;
②提供了可以取消事件绑定的函数;
3、取消DOM2事件绑定:
注意:如果要取消DOM2的事件绑定,那么在绑定事件时,处理函数必须要使用有名函数,而不能使用匿名函数。
btn2.removeEventListener("click",func2);
btn2.detachEvent("onclick",func2);
【js中的事件流】
1、事件冒泡:当某DOM元素触发一种事件时,会从当前结点开始,逐级往上触发其祖先节点的同类型事件,
直到DOM根节点;
什么情况下会产生事件冒泡?
① DOM0模型绑定事件,全部都是冒泡;
② IE8之前,使用attachEvent()绑定的事件,全部都是冒泡;
③ 其他浏览器,使用 addEventListener 添加的事件,当第三个参数省略或者为false时,为事件冒泡。
2、事件捕获:当某DOM元素触发一种事件时,会从文档节点开始,逐级向下chufa其祖先节点的同类事件,直到该节点自身;
什么情况下会触发事件捕获?
① 使用 addEventListener 添加事件,当第三个参数为true时,为事件捕获;
↓ DOM根节点 ↑
↓ ↑
捕 爷爷节点 冒
↓ ↑
获 父节点 泡
↓ ↑
↓ 当前节点 ↑
3、 阻止事件冒泡
在IE浏览器中使用:e.cancelBubble = true;
在其他浏览器中使用:e.stopPropagation();
兼容其它浏览器使用:
function myParagraphEventHandler(e) {
e = e || window.event;
if (e.stopPropagation) {
e.stopPropagation(); //IE以外
} else {
e.cancelBubble = true; //IE8之前
}
}
☆4、 取消事件默认行为:
在IE浏览器中使用:e.returnValue = false;
在其他浏览器中使用:e.preventDefault();
兼容其它浏览器使用:
function eventHandler(e) {
e = e || window.event;
// 防止默认行为
if (e.preventDefault) {
e.preventDefault(); //IE以外
} else {
e.returnValue = false; //IE
}
}
JS学习五(js中的事件)的更多相关文章
- JS 学习笔记--JS中的事件对象基础
事件:JavaScript中的事件是由访问web页面用户的一系列操作引起的,比如点击鼠标,键盘按键等.当用户执行某些操作的时候再去执行一些代码. 事件模型:内联模型.脚本模型.DOM2模型 内联模型: ...
- ActiveX(二)Js 监听 ActiveX中的事件
在上一篇随笔:ActiveX(一)第一个简单的Demo 中,已经可以实现 js 单向调用 ActiveX 中的方法,在很多情况下ActiveX中的方法的执行时相对耗时.耗性能的.在这样的情况下.Act ...
- node.js学习笔记(三)——事件循环
要理解事件循环,首先要理解事件驱动编程(Event Driven Programming).它出现在1960年.如今,事件驱动编程在UI编程中大量使用.JavaScript的一个主要用途是与DOM交互 ...
- js实例分析JavaScript中的事件委托和事件绑定
我们在学习JavaScript中,难免都会去网上查一些资料.也许偶尔就会遇到“事件委托”(也有的称我“事件代理”,这里不评论谁是谁非.以下全部称为“事件委托”),尤其是在查JavaScript的事件处 ...
- 锋利的JQuery学习之JQuery中的事件
一.加载DOM 在页面加载完毕之后,浏览器会通过javascript为dom元素添加事件,在常规的javascript中使用window.onload方法,而在jQuery中使用的是$(documen ...
- JS学习记录------JS基本指令
对未来的恐慌,和想成为一名自由开发的梦想.让我觉得应该点亮一个新的技能:WEB前端开发. 重新学习JS以及jQuery,让我在日常code的过程中可以更得心应手,毕竟,我爱代码. 这篇文章主要记录的内 ...
- 【js学习】js连接RabbitMQ达到实时消息推送
js连接RabbitMQ达到实时消息推送 最近在自己捯饬一个网站,有一个功能是需要后端处理完数据把数据发布到MQ中,前端再从MQ中接收数据.但是前端连接MQ又成了一个问题,在网上搜了下资料,点进去一篇 ...
- 《C#高级编程》学习笔记------C#中的事件和委托
本文转载自张子阳 目录 委托的作用 将方法绑定到委托 事件的来由 Observer设计模式 .Net Framework中的委托与事件 引言 委托 和 事件在 .Net Framework中的应用 ...
- Node.js学习笔记(三): 事件机制
大部分的nodejs核心api都建立在异步的事件驱动架构之上,所以events是Node.js 最重要的模块,它提供了唯一的接口.events 模块不仅用于用户代码与 Node.js 下层事件循环的交 ...
随机推荐
- knockoutjs模板实现树形结构列表
数据结构 /*数据*/ var ko_vue_data=[ { name: "总能耗", number:"0", energyone: 14410, energ ...
- C#上位机串口控制12864显示
实现的效果 上面是用Proteus仿真的,,对了如果自己想用proteus仿真需要安装下面这个软件 再看一下实物显示效果 先做上位机部分........... 为了程序一启动就把电脑上能用的串口号显示 ...
- linux下U盘挂载
linux下挂载U盘 一.Linux挂载U盘:1.插入u盘到计算机,如果目前只插入了一个u盘而且你的硬盘不是scsi的硬盘接口的话,那它的硬件名称为:sda1,可以用"fdisk -l&qu ...
- 贪心:字典树openjudge1799-最短前缀
描述 一个字符串的前缀是从该字符串的第一个字符起始的一个子串.例如 "carbon"的字串是: "c", "ca", "car&q ...
- python自动化运维二:业务服务监控
p { margin-bottom: 0.25cm; line-height: 120% } a:link { } p { margin-bottom: 0.25cm; line-height: 12 ...
- Loadrunner分布式测试
据经验,每生成一个虚拟用户,需要花费负载生成器大约 2M-3M 的内存空间.通常运行 controller的主机很少用作负载生成器.负载生成器的工作多由其他装有 LR Agent的PC 机来担任.如果 ...
- Python 第四天
高级特性 切片操作符 我们可以使用切片操作符获取 tuple 或者 list 中指定范围内的元素 list1 = [1,2,3,4,5,8,7,6,10] list2 = [1:3] #[2.3] l ...
- ubuntu下apache2-php-mysql的环境配置
基本的支持环境.暂时还不应用zend优化,因此这里就不涉及到zend optimizer的安装了.其实在ubuntu系统中中安装远比在windows系统中设置更为容易,而且在终端下设置更省事. 1.安 ...
- C语言——指针
一.什么是指针 "指针变量"是指用来存放变量地址的变量.指针变量也是一个变量,它和其他变量的区别在于它里面存的不是普通的数据,而是另一个变量的地址.访问变量有两种方式,第一种是直接 ...
- Microsoft Edge 浏览器远程代码执行漏洞POC及细节(CVE-2017-8641)
2017年8月8日,CVE官网公布了CVE-2017-8641,在其网上的描述为: 意思是说,黑客可以通过在网页中嵌入恶意构造的javascript代码,使得微软的浏览器(如Edege),在打开这个网 ...