5事件DOM零级事件跟DOM二级事件
事件的行为传播,行为本身跟事件绑定没有关系;
1、全新认识事件(某一个具体的行为)
->行为本身:浏览器天生自带的一些行为操作->click,mouseover(mouseenter),mousemover,mouseout(mouseleave),mousedown,mouseup,mousewhell(鼠标滚轮滚动的事件行为),scroll,resize(window.onresize当前屏幕窗口大小改变的行为),focus,blur(文本框获取焦点和失去焦点),keydown,keyup,keypress,load...(在当前元素的私有属性上存储着呢)
->事件绑定:给元素的某一个行为绑定方法,当行为触发的时候执行对应的方法
//[DOM零级事件绑定]
// function fn(){
// console.log("ok");
// }
//oBox.onclick = fn;//->绑定方法的时候fn没有执行,当行为触发的时候,浏览器才会执行fn这个方法
//oBox.onclick = fn();//->在绑定方法的时候就把fn执行了,这里是把fn执行的返回结果undefined绑定给元素的点击行为(这样写是不行的)
// oBox.onclick = (function () {
// return function () {
//
// }
// })();//->绑定方法的时候就把自执行函数执行了,把它的返回值"匿名函数"绑定给元素的点击行为,当行为触发的时候,执行里面小的"匿名函数"
//[DOM二级事件绑定]
// oBox.onclick = function () {
// console.log(1);
// };
// oBox.onclick = function () {
// console.log(2);
// };//->当点击行为触发的时候,只把最后一次绑定的方法执行了,第一次绑定的方法并没有执行,"DOM零级事件绑定,只能给当前元素的某一个行为绑定一个方法,绑定的最后一个方法会把前面的所有绑定的方法给覆盖掉"
//->div#box 在当前元素所属累EventTarget的原型上,提供了两个方法:addEventListener/removeEventListener实现DOM二级事件绑定和移除绑定
//->DOM零级事件绑定和DOM二级事件绑定可以共存,不冲突(DOM和DOM2的事件处理机制是不一样的):DOM0起始就是对象的属性名和属性值操作的机制(onclick就是一个属性名,绑定的方法就是它的一个属性值,当行为触发的时候获取到属性值即可),DOM2的机制是使用了浏览器的事件池/事件队列的机制完成的
//一个只能绑定一个方法 一个是能绑定多个方法
//2、->DOM0中的事件行为在DOM2中依然可以进行使用,但是DOM2还单独的提了一些DOM0中没有的行为DOMContentLoaded
//3、DOM0事件绑定兼容所有的浏览器,而DOM2事件绑定兼容性特别差(IE6~8和标准浏览器之间的区别)
4、DOM0事件绑定在移除绑定方法的时候也有一些细节的问题需要重点考虑:移除:不需要管之前绑定的是啥方法;DOM2事件绑定,以后处理DOM2绑定的时候,需要"瞻前顾后":绑定的时候要想着我可能还会移除,所有我们绑定的方法基本上都是实名函数
//(function(){})===(function(){});//->false不是同一个堆内存地址
//->匿名函数不是同一个堆内存地址,移除不掉
oBox.addEventListener("click", function(){
console.log(1);
}, false);
oBox.addEventListener("click", function(){
console.log(1);
}, false);*/ /*//->绑定的方法基本上都是实名函数
function fn() {
console.log(1);
}
oBox.addEventListener("click", fn, false); oBox.removeEventListener("click", fn, false);*/
=================================================================================
//面试题:document.onload和$(document).ready()的区别?
//document.onload只有页面中的HTML结构、图片、文字等所有资源都加载完成才会触发onload这个行为,在同一个页面中只能使用一次;
//->因为document.onload是DOM0事件绑定,只能给其绑定一个方法(只能执行一次),onload就是所有资源都加载完成才会执行;
//->它也可以使用多次,需要使用DOM2级事件绑定
// window.addEventListener("load",function(){
// console.log(1);
// },false);
// window.addEventListener("load",function(){
// console.log(2);
// },false);
5事件DOM零级事件跟DOM二级事件的更多相关文章
- 深入理解DOM事件类型系列第五篇——文本事件
× 目录 [1]change [2]textInput [3]input[4]propertychange[5]兼容 前面的话 如果DOM结构发生变化,触发的是变动事件:如果文本框中的文本发生变化,触 ...
- 深入理解DOM事件类型系列第三篇——变动事件
× 目录 [1]删除节点 [2]插入节点 [3]特性节点[4]文本节点 前面的话 变动(mutation)事件能在DOM中的某一部分发生变化时给出提示,这类事件非常有用,但都只能使用DOM2级事件处理 ...
- js操作DOM动态添加和移除事件
非IE下,注意事件名不带on,如onclick为click 添加事件:DOM对象.addEventListener('事件名',函数名,true/false); 删除事件:DOM对象.removeEv ...
- JavaScript DOM高级程序设计 4.3控制事件流和注册事件侦听器--我要坚持到底!
一.事件流 我们通过下面一个实例,进行说明. <body> <h1>Event Flow</h1> <ul id="nav"> &l ...
- javascript中0级DOM和2级DOM事件模型浅析
Javascript程序使用的是事件驱动的设计模式,为一个元素添加事件监听函数,当这个元素的相应事件被触发那么其添加的事件监听函数就被调用: <input type="button&q ...
- JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象
前 言 絮叨絮叨 这里是JS基础知识集中讲解的第三篇,也是最后一篇,三篇JS的基础,大多是知识的罗列,并没有涉及更难得东西,干货满满!看完这一篇后,相信许多正在像我一样正处于初级阶段的同学, ...
- React对比Vue(03 事件的对比,传递参数对比,事件对象,ref获取DOM节点,表单事件,键盘事件,约束非约束组件等)
import React from 'react'; class Baby extends React.Component { constructor (props) { super(props) t ...
- 整理之DOM事件阶段、冒泡与捕获、事件委托、ie事件和dom模型事件、鼠标事件
整理之DOM事件阶段 本文主要解决的问题: 事件流 DOM事件流的三个阶段 先理解流的概念 在现今的JavaScript中随处可见.比如说React中的单向数据流,Node中的流,又或是今天本文所讲的 ...
- javascript中0级DOM和2级DOM事件模型浅析 分类: C1_HTML/JS/JQUERY 2014-08-06 15:22 253人阅读 评论(0) 收藏
Javascript程序使用的是事件驱动的设计模式,为一个元素添加事件监听函数,当这个元素的相应事件被触发那么其添加的事件监听函数就被调用: <input type="button&q ...
随机推荐
- c#xml序列化对象,xml标记都缩写了
最近最后一个接口,他们的格式很严格必须是如下格式 <message> <age>20</age> <name>张三</name> </ ...
- 【Linux】常用命令 lsof查看打开的文件
Linux系统把软硬件都抽象成文件,所以通过文件可以追踪到很多重要信息,如读取的配置文件.打开的端口等. 下面是常见的用法: 默认测试文件名为text.txt 1,显示打开text.txt的进程: l ...
- (org.hibernate.LazyInitializationException:19) - could not initialize proxy错误
(org.hibernate.LazyInitializationException:19) - could not initialize proxy错误 在刚插入数据后,马上使用dao进行query ...
- oracle 对象权限 系统权限 角色权限
系统权限: 允许用户执行特定的数据库动作,如创建表.创建索引.连接实例等 对象权限: 允许用户操纵一些特定的对象,如读取视图,可更新某些列.执行存储过程等 select * from user_sys ...
- BZOJ 1069 最大土地面积
Description 在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. Input 第1行一个正整数N,接下来N行,每行2个数x,y ...
- SQL Server查看所有表大小,所占空间
create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_ ...
- thinkphp引入类的使用
比如发送邮件类phpmailer 1.将核心文件放入ORG目录下 2.在使用的地方,引入这个类文件 如何引入呢? import('@.ORG.phpmailer'); 这个表示引入当前项目中的ORG中 ...
- BZOJ 1054 [HAOI2008]移动玩具
1054: [HAOI2008]移动玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1388 Solved: 764[Submit][Statu ...
- HDOJ 2058 The sum problem
Problem Description Given a sequence 1,2,3,--N, your job is to calculate all the possible sub-sequen ...
- DateGridew导出Excel表+常见错误提示
在敲机房收费系统的时候,显示数据的时候需要将DateGridew 中的数据导出进Excel表.DateGridew导出Excel表是比较常见的,当然导出Excel表有很多种方法,下面是个人认为比较容易 ...