代码之家  ›  专栏  ›  技术社区  ›  Krumelur

执行锚的href,但不执行底层DIV的“onclick”?

  •  0
  • Krumelur  · 技术社区  · 14 年前

    请参见下面截图中的代码/html。我有一个带有“href”的锚,它位于带有“onclick”事件处理程序的DIV中。如果我单击锚,浏览器将打开一个新的选项卡并执行“onclick”。如果用户点击了锚,我想抑制“onclick”的执行。一键返回“false”将触发Href。这里的解决方案是什么?

    <html>
    <head>
    <script>
    function clicky()
    {
    alert("Click!");
    }
    </script>
    </head>
    <body>
    <div id="adiv" onclick="clicky()" style="border:1px solid black;background-color:red;width:400px;height:300px;">
    <a href="http://www.gohere.but.dont.execute.onclick.com" target="_blank">a link</a>
    </div>
    </body>
    </html>
    

    2 回复  |  直到 14 年前
        1
  •  7
  •   InvisibleBacon    14 年前

    最简单的方法是停止onclick事件从anchor标记传播到div。只需向anchor添加onclick事件并将处理程序设置为:

    event.cancelBubble = true; if(event.stopPropagation) { event.stopPropagation(); }
    

    这是跨浏览器代码。在IE、FF、Chrome、Safari中测试。 所以现在您的代码应该如下所示:

    <html>
    <head>
    <script>
    function clicky()
    {
    alert("Click!");
    }
    </script>
    </head>
    <body>
    <div id="adiv" onclick="clicky()" style="border:1px solid black;background-color:red;width:400px;height:300px;">
    <a href="http://www.gohere.but.dont.execute.onclick.com" target="_blank" onclick="event.cancelBubble = true; if(event.stopPropagation) { event.stopPropagation(); }">a link</a>
    </div>
    </body>
    </html>
    
        2
  •  3
  •   casablanca    14 年前

    给你的主播一个身份证 onclick 处理程序,检查事件的目标是否是您的锚:

    <div id="adiv" onclick="clicky(event)" style="border:1px solid black;background-color:red;width:400px;height:300px;">
    <a id="link" href="http://www.gohere.but.dont.execute.onclick.com" target="_blank">a link</a>
    
    <script>
    function clicky(event) {
      event = event || window.event;
      var target = event.target || event.srcElement;
      if (target == document.getElementById('link'))
        return true;
      alert("Click!");
    }
    </script>