zoukankan      html  css  js  c++  java
  • 阻止事件冒泡

    在html中触发的事件会往上冒泡,直到最上层.比如

    源码:


    <div onclick="alert('div is clicked')">

    <a onclick="alert('a is clicked'); return false;" href="#">Click me, twice alert</a>

    </div>



    点击click,会弹出两个alert提示框.
    防止触发上层div的方法是在点击时事件中加上:event.cancelBubble=true;
    如下:

    源码:


    <div onclick="alert('div isn\'t clicked')">

    <a onclick="alert('a is clicked'); event.cancelBubble=true;return false;" href="#">Click me, Once alert</a>

    </div>

    这种做法是从Bret Taylor的blog上面抄来的,原文地址在这里(好像是,不是也别怪我。)。对于避免ajax应用中不同层的事件干扰很有用的。

    先说一下“取消(cancel)”和“停止(stop)”的区别:说白了,停止就是当事件发生后,阻止它自动冒泡到父容器内;而取消则是当冒泡发生到父容器之后停止,也就是不在当前元素中响应。天哪,这东西说起来话长了,代码说话: 

    js 代码
    Js代码 复制代码
    1. function stopEvent(e) {  
    2.                         if (!e) e = window.event;  
    3.                         if (e.stopPropagation) {  
    4.                         e.stopPropagation();  
    5.                         } else {  
    6.                         e.cancelBubble = true;  
    7.                         }  
    8.                         }  
    9.                         var link = document.getElementById("link");  
    10.                         link.onclick = stopEvent;  
    11.                           
    function stopEvent(e) { if (!e) e = window.event; if (e.stopPropagation) { e.stopPropagation(); } else { e.cancelBubble = true; } } var link = document.getElementById("link"); link.onclick = stopEvent;

     

    以上这一段是阻止父容器事件的 

    js 代码
    Js代码 复制代码
    1. function cancelEvent(e) {  
    2.                         if (!e) e = window.event;  
    3.                         if (e.preventDefault) {  
    4.                         e.preventDefault();  
    5.                         } else {  
    6.                         e.returnValue = false;  
    7.                         }  
    8.                         }  
    9.                         var link = document.getElementById("link");  
    10.                         link.onclick = function(e) {  
    11.                         cancelEvent(e);  
    12.                         stopEvent(e);  
    13.                         }  
    14.                           
    function cancelEvent(e) { if (!e) e = window.event; if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; } } var link = document.getElementById("link"); link.onclick = function(e) { cancelEvent(e); stopEvent(e); }

     

    以上这一段是阻止子元素事件的

  • 相关阅读:
    PHP使用file_put_contents写入文件的优点
    CSS3如何去除 inline block 元素之间多出的空格
    PHP中根据IP地址判断所在城市等信息
    CSS3使用Animation为同一个元素添加多个动画效果
    Ubuntu Server 12.04 安装 Jabberd2 服务器
    Mac系统使用命令行快捷打开Sublime
    在 Flash ActionScript 2.0 中调用 Javascript 方法
    elem.attr()无法正确判断checkbox是否选中
    android 竖向viewpager
    【iOS入门】UITableView
  • 原文地址:https://www.cnblogs.com/yuzhongwusan/p/1363419.html
Copyright © 2011-2022 走看看