事件冒泡

并不是所有的事件都支持事件冒泡,比如submit ,focus,blur不支持事件冒泡,mouseover,mouseout虽然支持冒泡,但是一般不用,因为需要经常计算元素的位置,消耗比较大。
事件冒泡带来的优点是可以使用事件委托,提高了页面的性能,缺点是父级元素中如果也绑定了一样的事件,那么子元素事件的触发也会触发父级元素的事件,解决办法就是禁止子元素的事件冒泡。

事件委托

这是好东西,借助他可以提高页面的性能。首先,每个函数都是对象,都会占用内存,内存中的对象越多,性能越差。其次,必须事先指定所有事件程序而导致DOM的访问次数,会延迟整个页面的交互时间。
比如cick事件,我们可以把页面上所有的click事件都绑定到document元素上,然后根据event.target对象的属性(比如class,id什么的)区分,确定是来自哪个事件然后执行相应的代码。
事件委托还有一个优点,如果某些DOM是动态添加的,那么一旦添加后也会立即绑定相应的事件(如果在document元素绑定了的话),就不用再重新去绑定啦。
使用event.currentTarget == event.target可以判断是在绑定的元素自身发生的还是由子元素冒泡上来的。

jQuery中的事件绑定函数:on

关键是它的selecter参数,如果没有这个参数,直接在这个元素上触发,不管是本身触发还是子元素冒泡上来触发,当然可以在function中区分event.target实现事件委托。
如果selecter参数存在,那么为事件委托。只有在参数中选择器这一级及其后代上触发,之上的不会触发。同样可以用event.currentTarget == event.target判断是在绑定的元素自身发生的还是由子元素冒泡上来的。参数多个的话用''''括起来,而不是[]。

javascript事件学习笔记的更多相关文章

  1. JavaScript正则表达式学习笔记(二) - 打怪升级

    本文接上篇,基础部分相对薄弱的同学请移步<JavaScript正则表达式学习笔记(一) - 理论基础>.上文介绍了8种JavaScript正则表达式的属性,本文还会追加介绍几种JavaSc ...

  2. C#委托与事件学习笔记

    委托事件学习笔记 本文是学习委托和事件的笔记,水平有限,如有错漏之处,还望大神不吝赐教. 什么是委托?从字面意思来解释,就是把一个动作交给别人去执行.在实际开发中最常用的就是使一个方法可以当做一个参数 ...

  3. javascript正则表达式 - 学习笔记

    JavaScript 正则表达式 学习笔记 标签(空格分隔): 基础 JavaScript 正则表达式是用于匹配字符串中字符组合的模式.在javascript中,正则表达式也是对象.这些模式被用于Re ...

  4. JavaScript简易学习笔记

    学习地址:http://www.w3school.com.cn/js/index.asp 文字版: https://github.com/songzhenhua/github/blob/master/ ...

  5. javaScript 对象学习笔记

    javaScript 对象学习笔记 关于对象,这对我们软件工程到学生来说是不陌生的. 因为这个内容是在过年学到,事儿多,断断续续,总感觉有一丝不顺畅,但总结还是要写一下的 JavaScript 对象 ...

  6. 《JS高程》事件学习笔记

    事件:文档或浏览器窗口中发生的一些特定的交互瞬间,也即用户或浏览器自身执行的某种动作. -------------------------------------------------------- ...

  7. 【MarkMark学习笔记学习笔记】javascript/js 学习笔记

    1.0, 概述.JavaScript是ECMAScript的实现之一 2.0,在HTML中使用JavaScript. 2.1 3.0,基本概念 3.1,ECMAScript中的一切(变量,函数名,操作 ...

  8. Javascript MVC 学习笔记(一) 模型和数据

    写在前面 近期在看<MVC的Javascript富应用开发>一书.本来是抱着一口气读完的想法去看的.结果才看了一点就傻眼了:太多不懂的地方了. 仅仅好看一点查一点,一点一点往下看吧,进度虽 ...

  9. Javascript作用域学习笔记(三)

    看完<你不知道的javascript>上,对作用域的新的理解(2018-9-25更) 一.学习笔记:   1.javascript中的作用域和作用域链 +  每个函数在被调用时都会创建一个 ...

随机推荐

  1. QString 与 QByteArray笔记

    程序中在于外设打交到是常常会用到读硬件显示到控件,或是读控件写到硬件的情况,操作的最多的是字节流,所以肯定会用到QString 和QByteArray,下面测试一些常用的转换: #include &l ...

  2. 一个序列是否可能是push序列的pop序列

    输入:两个序列A.B,A作栈的push序列,判断B是否可能是A的pop序列. #include<iostream> #include<stack> using namespac ...

  3. 配置 dovecat 的 log

    关于 dovecot 的日志配置,请检查 conf.d/10-logging.conf 文件, 特别需要提示的是将 错误/信息 文件分开保存,建议分别设置 log_path / info_log_pa ...

  4. CUDA从入门到精通

    http://blog.csdn.net/augusdi/article/details/12833235 CUDA从入门到精通(零):写在前面 在老板的要求下.本博主从2012年上高性能计算课程開始 ...

  5. Eclipse下如何导入jar包【转载】

    我们在用Eclipse开发程序的时候,经常想要用到第三方的jar包.这时候我们就需要在相应的工程下面导入这个jar包.以下配图说明导入jar包的步骤. 1.右击工程的根目录,点击Properties进 ...

  6. Codeforces Round #313 (Div. 2) A. Currency System in Geraldion 水题

    A. Currency System in Geraldion Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/c ...

  7. 理解WebKit和Chromium: 调试Android系统上的Chromium

    转载请注明原文地址:http://blog.csdn.net/milado_nju 1. Android上的调试技术 在Android系统上,开发人员能够使用两种不同的语言来开发应用程序,一种是Jav ...

  8. PHP写入文件用file_put_contents代替fwrite优点多多(转)

    使用php有一段时间了,之前一直用fwrite写入文件,不过当我知道file_put_contents这个函数之后,fwrite就比较少用了,file_put_contents比fwrite代码更简洁 ...

  9. HOW MYSQL USES INTERNAL TEMPORARY TABLES

    HOW MYSQL USES INTERNAL TEMPORARY TABLES Table of Contents [hide] 1)UNION queries 2)Some views 3)SQL ...

  10. Java多线程中start()和run()的区别

    Java的线程是通过java.lang.Thread类来实现的.VM启动时会有一个由主方法所定义的线程.可以通过创建Thread的实例来创建新的线程.每个线程都是通过某个特定Thread对象所对应的方 ...