一、事件对象

1.常用的事件
2.每个元素身上的事件都是天生存在的 不需要我们去定义 只需要我们给这个事件绑定一个方法
当事件触发的时候就会执行这个方法

3.事件绑定的写法
①div.onclick=function (dom 0级)
②addEventListener( ) 或 attachEvent( ) (dom 2级事件绑定)
③二者的区别:
onclick是这个元素私有的属性 天生自带的 而addEventlistener是公有的属性
从EventTarget(事件源)对象上继承来的
④ie低版本的attachEvent 是公有的
⑤div.onclick存在事件 冒泡机制没有捕获机制
⑥div.addEventlistener 可有冒泡可有捕获
⑦div.attachEvent 只有冒泡机制

4.addEventlistener和attachEvent的区别
①前者有冒泡和捕获机制 后者只有冒泡机制
②事件前者不带on后者不带on
③前者this指向当前元素 后者指向window
④前者是标准浏览器的写法 后者是ie8以下的写法

二、arguments和event

1.arguments

每个函数都有一个arguments对象 他是这个函数所有参数构成的集合

上面的控制台是arguments数组中有一个元素叫mouseevent

所以 每个事件的方法中 浏览器都给他一个参数叫mouseevent(鼠标事件对象)我们所有的鼠标的信息
都临时存储在mouseevent对象上

2.mouseevent有兼容性

①标准浏览器可以直接读取 但是ie不行
②解决办法:var e = e || window.event

3.event对象的兼容性

clientX和clientY的兼容性 是鼠标离窗口左上角的坐标
①clientX和clientY是鼠标到浏览器窗口左上角的距离坐标
②pageX和pageY是鼠标到网页左上角的距离坐标 但是ie低版本没有这个属性
③在ie下怎么算pageY的值: 用clientY + scrollTop = pageY

三、事件源  点击哪个元素 哪个就是事件源

1.标准浏览器的事件源是 ev.target
2.ie8及一下没有这个属性 但是ie有ev.srcElement

四、事件冒泡阻止

①标准浏览器:event.stopPropagation( )
②ie低版本:event.cancelBubble=true(通用的标准浏览器也可以)
③兼容写法:event.stopPropagation?event.stopPropagation( ):event.cancelBubble=true

五、阻止事件默认行为兼容

1.a的href
①href为空 会自动刷新页面
②href为# 锚点跳转
③href为javascript:;阻止默认行为的发生

2.写法:
①标准浏览器:event.preventDefault
②ie8以下:event.returnValue=false
③event.preventDefault?Event.preventDefault( ):event.return = false

六、事件委托

1.什么是事件委托

如果子元素身上绑定大量相同的事件 我们尽量采用事件委托 所有子元素把自己的事件委托给父级了
原理:采用冒泡机制完成的

2.为什么使用事件委托呢

传统的for循环绑定事件 会增加大量的dom操作(就是事件) 影响页面性能 采用事件委托就是把所有的事件
基于一个元素身上

3.事件委托的优点

①传统的事件绑定对新增的元素不起作用 但事件委托起作用
②传统的事件绑定 有多少元素js就需要绑定多少事件 事件委托只需要一个

案例:

从零开始的全栈工程师——js篇2.21(事件对象 arguments 阻止事件默认行为兼容 事件委托 事件源对象)的更多相关文章

  1. 从零开始的全栈工程师——js篇(js的异步)

    js中的异步 Javascript语言的执行环境是"单线程"(single thread,就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任 ...

  2. 从零开始的全栈工程师——js篇2.20(事件对象 冒泡与捕获)

    一.复习 面向对象 1)单例模式 2)工厂模式 3)构造函数 ①类js天生自带的类 基类object function array number math boolean date regexp st ...

  3. 从零开始的全栈工程师——js篇2.8

    DOM(document object model) DOM主要研究htmll中的节点(也就是标签) 对节点进行操作    可以改变标签  改变标签属性  改变css样式  添加事件 一.操作流程 1 ...

  4. 从零开始的全栈工程师——js篇2.5

    数据类型与全局属性 js的本质就是处理数据 数据来自于后台的数据库所以变量就起到一个临时存储数据的这作用ECMAscirpt 制定了js的数据类型 一.数据类型 1.基本数据类型 基本数据类型就是简单 ...

  5. 从零开始的全栈工程师——js篇2.1(js开篇)

    JS开篇 一.js介绍 全称 javascript 但不是java 他是一门前台语言 而java是后台语言js作者 布兰登·艾奇 前台语言:运行在客户端的后台语言:跟数据库有关的 能干什么?    页 ...

  6. 从零开始的全栈工程师——js篇(闭包)

    闭包是js中的一大特色,也是一大难点.简单来说,所谓闭包就是说,一个函数能够访问其函数外部作用域中的变量. 闭包的三大特点为: 1.函数嵌套函数 2.内部函数可以访问外部函数的变量 3.参数和变量不会 ...

  7. 从零开始的全栈工程师——js篇2.16

    js操作css样式 div.style.width=“200px” 在div标签内我们添加了一个style属性 并设定了width值 这种写法会给标签带来了大量的style属性 跟实际项目是不符的 我 ...

  8. 从零开始的全栈工程师——js篇2.14(表单与计时器)

    一.表单 Form input select textarea type=”radio/checkbox/password/button/text/submit/reset/” 表单的事件 oncha ...

  9. 从零开始的全栈工程师——js篇2.12(面向对象)

    面向对象 Js一开始就是写网页特效,面向过程的,作者发现这样写不好,代码重复利用率太高,计算机内存消耗太大,网页性能很差. 所以作者就收到java和c的影响,往面向对象靠齐.Js天生有一个Object ...

随机推荐

  1. vee-validate使用教程

    vee-validate使用教程 *本文适合有一定Vue2.0基础的同学参考,根据项目的实际情况来使用,关于Vue的使用不做多余解释.本人也是一边学习一边使用,如果错误之处敬请批评指出* 一.安装 n ...

  2. 出现epoll failed: Bad file descriptor的原因

    今天遇到了这个问题,之前找了半天原来是IO事件的socket描述符在epoll_ctl()处理之前关闭了. if(epoll_ctl(epollFd, EPOLL_CTL_DEL, ev->fd ...

  3. 小程序scroll-view采坑

    scroll-view分为水平滚动和垂直滚动.注意滚动视图垂直滚动时一定要设置高度否则的话scroll-view不会生效.

  4. html表单笔记

    1.下面是 <form> 属性的列表: accept-charset 规定在被提交表单中使用的字符集(默认:页面字符集). action 规定向何处提交表单的地址(URL)(提交页面). ...

  5. react 中文文档案例五 (循环列表)

    function NumberList(props) { const numbers = props.numbers; const listItems = numbers.map((number) = ...

  6. js 遍历tree的一个例子

    小例子蕴含着到力量,我希望自己有改变自己生活的能力,自己有主宰自己命运的能力... 备注:这个例子有问题. <!DOCTYPE html> <html lang="en&q ...

  7. Hibernate常见报错

    1.A different object with the same identifier value was already associated with the session(使用Hibern ...

  8. poj3728之离线LCA+dp思想/RMQ+LCA(非常好的题目)

    题意很简单 给一个树(n < 5w) 每个点有个权值,代表商品价格 若干个询问(5w) 对每个询问,问的是从u点走到v点(简单路径),商人在这个路径中的某点买入商品,然后在某点再卖出商品,   ...

  9. A. The number of positions

    A. The number of positions time limit per test 0.5 second memory limit per test 256 megabytes input ...

  10. Ubuntu14上安装Mongo3.2

    1. 安装 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D68FA50FEA312927 echo "deb ...