事件源,事件对象(简要学习笔记十八)

3.事件委托:利用事件的冒泡技术。子元素的事件最终会冒泡到父元素直到跟节点。事件监听会分析从子元素冒泡上来的事件。

事件委托的好处:

1.每个函数都是对象,都会占用内存,内存中对象越多,性能越差。

2.必须事先指定所有事件处理程序而导致的DOM访问次数,会延迟整个页面的交互就绪时间。

怎样处理由于事件较多引起的性能差:

1.采用事件委托技术,限制简历的连接数量

2.在不需要的时候移除事件处理程序

例子:

html:

<div id="myDiv">     <input type="button" value="点我" id="myBtn"> </div>

js:

var btn=document.getElementById("myBtn"); btn.onclick=function(){      document.getElementById("myDiv").innerHTML="Progress..."; }

注意:通过设置innerHTML可以把按钮移走,但是事件处理程序依旧与按钮保持着事件处理程序的引用都保存在内存中。

所以最好手动移除:

var btn=document.getElementById("myBtn"); btn.onclick=function(){     btn.onclick=null;//移除事件处理程序     document.getElementById("myDiv").innerHTML="Progress..."; }

4.事件对象与事件源

function eventHandler(e){     //获取事件对象  e = e || window.event;//IE和Chrome下是window.event FF下是e      //获取事件源  var target = e.target || e.srcElement;//IE和Chrome下是srcElement FF下是target  }

5.取消事件默认行为

function eventHandler(e) {     e = e || window.event;     // 防止默认行为      if (e.preventDefault) {         e.preventDefault();//IE以外      } else {         e.returnValue = false;//IE          //注意:这个地方是无法用return false代替的          //return false只能取消元素      } }

6.阻止事件冒泡

function myParagraphEventHandler(e) {     e = e || window.event;     if (e.stopPropagation) {         e.stopPropagation();//IE以外      } else {         e.cancelBubble = true;//IE      } }

7.event与target

event:代表了包含了事件的所有状态。

target:触发事件的元素。

currentTarget:事件绑定的元素。

注意着两者的区别。

html:

<ul id="ulT"> <li class="item1">fsda</li> <li class="item2">ewre</li> <li class="item3">qewe</li> <li class="item4">xvc</li> <li class="item5">134</li> </ul>

js:
document.getElementById("ulT").onclick = function  (event) {     console.log(event.target);     console.log(event.currentTarget); }

时间: 2024-12-21 01:26:40

事件源,事件对象(简要学习笔记十八)的相关文章

JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)

1.事件冒泡与事件捕获 2.事件与事件句柄 3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处: 1.每个函数都是对象,都会占用内存,内存中对象越多,性能越差. 2.必须事先指定所有事件处理程序而导致的DOM访问次数,会延迟整个页面的交互就绪时间. 怎样处理由于事件较多引起的性能差: 1.采用事件委托技术,限制简历的连接数量 2.在不需要的时候移除事件处理程序 例子: html: <div id="myDiv&

JavaScript权威设计--JavaScript函数(简要学习笔记十)

1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"likeZqz()".有些些函数是用作内部用的或者为私有函数通常以一条下划线为前缀,就像"_zqzName()". 2.以表达式方式定义的函数 如: var zqz=function (){ return "zhaoqize"; } 在使用的时候必须把它赋值给一个变

JavaScript权威设计--Window对象之Iframe(简要学习笔记十四)

1.Window对象属性的文档元素(id) 如果在HTML文档中用id属性来为元素命名,并且如果Window对象没有此名字的属性,Window对象会赋予一个属性,它的名字是id属性的值,而他们的值指向表示文档元素的HTMLElement对象. Window对象是以全局对象的形式存在于作用域链的最上层,这就意味着HTML文档中使用的id属性会成为可以被脚本访问的全局变量. 如: <button id="but"/> 就可以通过全局变量but来引用此元素. 2.多窗体窗口(if

JavaScript权威设计--JavaScript对象(简要学习笔记八)

1.属性的特性 一个属性包含一个名字和4个特性.4个特性:值,可写性,可枚举性,可配置性 2.对象的三个属性 一:原型属性 要想检测一个对象是否是另一个对象的原型,使用isPrototypeOf()方法 如: var P={x=1}; //定义一个原型对象 var o=Object.create(p); //使用这个原型对象创建一个对象 p.isPrototypeOf(o) //true:o继承自p Object.isPrototypeOf(p) //true:p继承自Object.protot

JavaScript权威设计--Window对象(简要学习笔记十三)

1.Window对象是所有客户端JavaScript特性和API的主要接入点. Window对象中的一个重要属性是document,它引用Document对象. JavaScript程序可以通过Document对象和它包含的Element对象遍历和管理文档. 2.URL中的JavaScript 在URL后面跟一个JavaScript:协议限定符.里面的代码会作为JavaScript代码进行运行,需用分号分割. 如: <a href="javascript:alert('OK!')"

JavaScript权威设计--CSS(简要学习笔记十六)

1.Document的一些特殊属性 document.lastModified document.URL document.title document.referrer document.domain document.write() document.writeIn() 2.查询选取的文本 使用鼠标mouseup事件 3.浏览器定义了多项文本编辑命令(富文本编辑器) 使用Document对象的execCommand()方法. document.queryCommandSupport()判断浏

Java基础学习笔记十八 异常处理

什么是异常?Java代码在运行时期发生的问题就是异常. 在Java中,把异常信息封装成了一个类.当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置.原因等). 异常的继承体系 在Java中使用Exception类来描述异常. 查看API中Exception的描述,Exception 类及其子类是 Throwable 的一种形式,它用来表示java程序中可能会产生的异常,并要求对产生的异常进行合理的异常处理. Exception有继承关系,它的父类是Throwable.Thr

PHP学习笔记十八【构造函数】

<?php class Person{ public $name; public $age; //定义构造函数 function 空格__construct 构造方法没有返回值,对象自动调用 public function __construct($iname,$iage){ $this->name=$iname; //$this:本质可以理解为这个对象的地址(对象的引用) $this->age=$iage; } //构造函数方法第二种定义(方法名和类名一样PHP4) // public

JavaScript权威设计--JavaScript函数(简要学习笔记十二)

1.作为命名空间的函数 有时候我们需要声明很多变量.这样的变量会污染全局变量并且可能与别人声明的变量产生冲突. 这时.解决办法是将代码放入一个函数中,然后调用这个函数.这样全局变量就变成了 局部变量. 如: function my(){ } my(); //别忘记调用 这段代码定义了一个单独的全局变量:名叫"my"的函数. 我们还可以这么写,定义一个匿名函数: (function(){ //这里第一个左括号是必须的,如果不写,JavaScript解析器会将 //function解析成函