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 ...
随机推荐
- 测试gcc的优化选项
一.测试准备及原理 测试代码: static void wait(volatile unsigned long dly) { ; dly--); } int main(void) { unsigned ...
- 最精简的代理设计模式demo - 保姆看孩子
1,协议文件 @protocol NursePtotocol <NSObject> //保姆的协议方法 - (void)startToAmuseBaby; @end 2,管理类(使用类) ...
- WPF学习笔记-TextBox光标位置如何放到最后?
TextBox光标位置如何放到最后? 使用SelectionStart : TextBox.SelectionStart = TextBox.Text.Length;
- ConnectifyHotspotInstaller3.7注册码
ConnectifyHotspotInstaller3.7注册码 邮箱: wcxu21@126.com 密 钥:QEX4HR-9VLS2N-AXFA3A-K8CD8M-1DQ7Q1-CCDDTB-KL ...
- h.264直接预测
直接预测是B帧上一种独有的预测方式,其中直接预测又分为两种模式: 时域直接模式(temporal direct).空域直接模式(spatial direct). 在分析这两种模式之前,有一个前提概念需 ...
- [置顶] 2014年八大最热门IT技能
根据Computerworld网站组织的年度预测调查,众多IT专业人士在2014年所面临的整体就业形势与今年基本持平——今年有33%的企业有计划增加IT部门的员工数量,而未来一年则有32%的企业有此打 ...
- session与cookie的区别【转】
我所知道的有以下区别: 1.session保存在服务器,客户端不知道其中的信息:cookie保存在客户端,服务器能够知道其中的信息. 2.session中保存的是对象,cook ...
- sed删除文本第一个匹配行
源文本如下,要求删除第一个为happy-123456的行. ----------------------------- aaaaaaa happy- bbbbbb asdasawe happy- ds ...
- 【转】java中float与byte[]的互转 -- 不错
原文网址:http://tjmljw.iteye.com/blog/1767716 起因:想把一个float[]转换成内存数据,查了一下,下面两个方法可以将float转成byte[]. 方法一 imp ...
- 动态规划(水题):COGS 261. [NOI1997] 积木游戏
261. [NOI1997] 积木游戏 ★★ 输入文件:buildinggame.in 输出文件:buildinggame.out 简单对比时间限制:1 s 内存限制:128 MB S ...