浅谈JavaScript的事件

 更新时间:2015年02月27日 11:07:29   投稿:hebedich  
事件是可以被 JavaScript 侦测到的行为。网页中的每个元素都可以产生某些可以触发 JavaScript 函数的事件。比方说,我们可以在用户点击某按钮时产生一个 onClick 事件来触发某个函数。事件在 HTML 页面中定义。

1、事件流

    事件流描述的是从页面中接收事件的顺序。但是IE提出的是冒泡流,而Netscape Communicator提出的是捕获流。
JavaScript事件流

2、事件冒泡(event bubbling)

    事件开始由最具体的元素(嵌套层次最深的那个节点)接收,然后逐级向上传播为较不为具体的节点(文档)。如下:

复制代码 代码如下:

<html>
    <head>
        <title>事件冒泡</title>
    </head>
    <body>
        <div id="myDiv">点击我</div>
    </body>
</html>
window.onload = function(){
    var obj = document.getElementById("test");
    obj.onclick = function(){
        alert(this.tagName);
    };
    document.body.onclick = function(){
        alert(this.tagName);
    };
    document.documentElement.onclick = function(){
        alert(this.tagName);
    };
    document.onclick = function(){
        alert("document");
    };
    window.onclick = function(){
        alert("window");
    }
};

事件传播顺序:div——>body——>html——>document

注意:
    现代所有浏览器都支持冒泡事件,但实现还有一些差别。IE5.5及更早版本中的事件冒泡会直接从body跳到document(不执行html)。Firefox、Chrome和Safari则将事件一直冒泡到window对象。

3、停止事件冒泡和取消默认事件

 a. 获取事件对象

复制代码 代码如下:

function getEvent(event) {
// window.event IE
// event 非IE
return event || window.event;
}

 b 功能:停止事件冒泡 

复制代码 代码如下:

function stopBubble(e) {
 // 如果提供了事件对象,则这是一个非IE浏览器
 if ( e && e.stopPropagation ) {
 // 因此它支持W3C的stopPropagation()方法
 e.stopPropagation();
} else {
 // 否则,我们需要使用IE的方式来取消事件冒泡
window.event.cancelBubble = true;
}
}

 c. 阻止浏览器的默认行为

复制代码 代码如下:

function stopDefault( e ) {
     // 阻止默认浏览器动作(W3C)
     if ( e && e.preventDefault ) {
         e.preventDefault();
     } else {
        // IE中阻止函数器默认动作的方式
        window.event.returnValue = false;
    }
    return false;
}

相关文章

  • javascript使用window.name解决跨域问题

    javascript使用window.name解决跨域问题

    window.name 的美妙之处:name 值在不同的页面(甚至不同域名)加载后依旧存在,并且可以支持非常长的 name 值(2MB)。
    2008-09-09
  • Javascript中window.name属性详解

    Javascript中window.name属性详解

    这篇文章主要介绍了Javascript中window.name属性详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • js实现可拖动DIV的方法

    js实现可拖动DIV的方法

    这篇文章主要介绍了js实现可拖动DIV的方法,有需要的朋友可以参考一下
    2013-12-12
  • JavaScript的类型、值和变量小结

    JavaScript的类型、值和变量小结

    这篇文章主要介绍了JavaScript的类型、值和变量小结的相关资料,需要的朋友可以参考下
    2015-07-07
  • js动态修改input输入框的type属性(实现方法解析)

    js动态修改input输入框的type属性(实现方法解析)

    本文是对js动态修改input输入框的type属性的实现方法。进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • 详解使用uni-app开发微信小程序之登录模块

    详解使用uni-app开发微信小程序之登录模块

    这篇文章主要介绍了详解使用uni-app开发微信小程序之登录模块,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • isArray()函数(JavaScript中对象类型判断的几种方法)

    isArray()函数(JavaScript中对象类型判断的几种方法)

    我们知道,JavaScript中检测对象类型的运算符有:typeof、instanceof,还有对象的constructor属性
    2009-11-11
  • JS中6个对象数组去重的方法

    JS中6个对象数组去重的方法

    这篇文章主要给大家介绍了关于JS中6个对象数组去重的方法,javascript数组去重是一个比较常见的需求,解决方法也有很多种,文中每种解决方法都给出了示例代码,需要的朋友可以参考下
    2023-07-07
  • 更优雅的微信小程序骨架屏实现详解

    更优雅的微信小程序骨架屏实现详解

    这篇文章主要介绍了更优雅的微信小程序骨架屏实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 原生Javascript实现五角星评分

    原生Javascript实现五角星评分

    这篇文章主要为大家详细介绍了原生Javascript实现五角星评分,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09

最新评论