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

1.事件冒泡与事件捕获

2.事件与事件句柄

 

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);
}

 转载:http://www.cnblogs.com/zqzjs/p/4878785.html

时间: 2024-12-26 02:39:46

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

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

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

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

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

JavaScript权威设计--JavaScript脚本化文档Document与CSS(简要学习笔记十五)

1.Document与Element和TEXT是Node的子类. Document:树形的根部节点 Element:HTML元素的节点 TEXT:文本节点   >>HtmlElement与HtmlDocument a:HtmlElement对象表示HTML中的一个个元素. b:HtmlDocument对象表示 HTML 文档树的根.HTMLDocument 接口对 DOM Document 接口进行了扩展,定义 HTML 专用的属性和方法.   >>HTML的DOM对象 a:DOM

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(

JavaScript权威设计--跨域,XMLHttpRequest(简要学习笔记十九)

1.跨域指的是什么?   2.Comet与Ajax   3.XMLHttpRequest 除了GET与POST之外,XMLHttpRequest规范也允许第一个参数为DELETE,HEAD,OPTIONS,PUT. 如果有请求头的话,需要设置它. 如:POST请求需要"Content-Type"头指定请求主题的MIME类型. request.setRequestHeader("Content-Type","text/plain");     PO

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

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

JavaScript权威设计--命名空间,函数,闭包(简要学习笔记十二)

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

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

1.with语句 语法: width(object){ statement } with语句可用于临时扩展作用域链.作用域链可以按序检索的对象列表,通过它可以进行变量名解析. with将object添加到作用域链的头部,然后执行内部statement,最后把作用域链回复到原始状态.   但是:with语句要尽量避免使用.有with代码的语句难以优化,且运行的更慢. 在对象嵌套跟多层次的时候通常会使用with来优化. 如: document.forms[0].address.value //->

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.prot