zoukankan      html  css  js  c++  java
  • js中的preventDefault与stopPropagation详解

    1. preventDefault: 

      比如<a href="http://www.baidu.com">百度</a>,这是html中最基础的东西,起的作用就是点击百度链接到http://www.baidu.com,这是属于<a>标签的默认行为;preventDefault方法就是可以阻止它的默认行为的发生而发生其他的事情;

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     5 <title>JS阻止链接跳转</title>
     6 <script type="text/javascript"> 
     7 function stopDefault( e ) { 
     8 if ( e && e.preventDefault ) 
     9    e.preventDefault(); 
    10     else 
    11    window.event.returnValue = false; 
    12 
    13     return false; 
    14 } 
    15 </script> 
    16 </head>
    17 <body>
    18 <a href="http://www.baidu.com" id="testLink">百度</a> 
    19 <script type="text/javascript"> 
    20 var test = document.getElementById('testLink'); 
    21 test.onclick = function(e) { 
    22    alert('我的链接地址是:' + this.href + ', 但是我不会跳转。'); 
    23    stopDefault(e); 
    24 } 
    25 </script>
    26 </body>
    27 </html>

    此时点击百度链接,不会打开http://www.baidu.com,而只是弹出一个alert对话框

    2. stopPropagation :

      起到阻止js事件冒泡的作用;

      2.1 讲stopPropagation方法之前必需先给大家讲解一下js的事件代理: 

      (1) 事件代理用到了两个在JavaSciprt事件中常被忽略的特性:事件冒泡以及目标元素

      事件冒泡: 当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发。这一过程被称为事件冒泡;这个事件从原始元素开始一直冒泡到DOM树的最上层.

      目标元素: 对任何一个事件来说,其目标元素都是原始元素,在我们的这个例子中也就是按钮。目标元素它在我们的事件对象中以属性的形式出现。使用事件代理的话我们可以把事件处理器添加到一个元素上,等待事件从它的子级元素里冒泡上来,并且可以很方便地判断出这个事件是从哪个元素开始的。

      下面看一段代码:

    <!DOCTYPE html>
    <HTML XMLns="http://www.w3.org/1999/xHTML" lang="gb2312">
    <head>
        <title> 阻止JS事件冒泡传递(cancelBubble 、stopPropagation)</title>
        <meta name="keywords" content="JS,事件冒泡,cancelBubble,stopPropagation" />
        <script>
            function doSomething (obj,evt) {
                alert(obj.id);
                var e=(evt)?evt:window.event;
                if (window.event) {
                    e.cancelBubble=true;// ie下阻止冒泡
                } else {
                    //e.preventDefault();
                    e.stopPropagation();// 其它浏览器下阻止冒泡
                }
            }
        </script>
    </head>
    <body>
        <div id="parent1" onclick="alert(this.id)" style="250px;background-color:yellow">
            <p>This is parent1 div.</p>
             <div id="child1" onclick="alert(this.id)" style="200px;background-color:orange">
                <p>This is child1.</p>
             </div>
            <p>This is parent1 div.</p>
        </div>
        <br />
        <div id="parent2" onclick="alert(this.id)" style="250px;background-color:cyan;">
             <p>This is parent2 div.</p>
             <div id="child2" onclick="doSomething(this,event);" style="200px;background-color:lightblue;">
                <p>This is child2. Will bubble.</p>
             </div>
             <p>This is parent2 div.</p>
        </div>
    </body>
    </HTML> 

    参考:http://www.jb51.net/article/46379.htm

      

  • 相关阅读:
    Pascal's Triangle II
    Pascal's Triangle
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Populating Next Right Pointers in Each Node
    path sum II
    Path Sum
    [转载]小波时频图
    [转载]小波时频图
    [转载]Hilbert变换及谱分析
  • 原文地址:https://www.cnblogs.com/max-tlp/p/8257688.html
Copyright © 2011-2022 走看看