2012-01-01 54 views
2

我有一个div,它有一个隐藏divonclick保留具有onclick事件的div内的链接功能

如果我在div内部有链接,则链接不起作用,因为onclick窃取了点击。

想要的结果:如果点击是在div内的任何地方进行的,但是链接,div被隐藏。如果在链接上点击了一个链接,那么我希望链接在_blank窗口中打开,div保持可见。

有没有办法用javascript处理这个问题?

+1

基本上是一样的东西:http://stackoverflow.com/questions/387736/how-to-stop-event-propagation-with-inline-onclick-attribute – 2012-01-01 23:53:33

回答

2

DEMO

里面的链接点击处理程序,你要打电话event.stopPropagation,或设置e.cancelBubble到真为准您的浏览器更喜欢。这将防止事件冒泡到你的div。

document.getElementById("thelink").onclick = function (e) { 
    window.open(); 
    if (e.stopPropogation) 
     e.stopPropogation(); 
    if (e.cancelBubble != null) 
     e.cancelBubble = true; 
}; 
+0

演示不起作用。点击hello会触发“DIV”提示 – 2012-01-02 00:08:02

+0

实际上它在FF中不起作用,但它可以在Chrome中使用。 – 2012-01-02 00:14:57

+0

@UnoMeinAme - 我更新了我的回答 – 2012-01-02 00:24:00

5
document.getElementById('yourlinksid').onclick = function(e){ 

    // ... pop your window ... 

    /* the following prevents the event from "bubbling up" 
     to the div's event handler */ 
    if(!e.stopPropagation) { 
     e.cancelBubble = true; 
     return; 
    } 

    e.stopPropagation();  
}; 

验证:

http://jsfiddle.net/kSTNT/4/

+0

这个JS/jQuery mash不起作用。 'getElementById()'上下文中不存在'click()'。 – 2012-01-01 23:59:36

0

如果你控制链接,最简单的方法是添加onclick =“event.stopPropagation();” (或任何跨浏览器的版本)到每个链接,这阻止div看到事件,而不会阻止发生链接的默认效果。

或者,如果链接仅包含文本,则可以在div的click事件中检查事件目标的标签名称,以查看它是否为链接,但如果您有更复杂的事情,则需要步行dom树从事件目标到div来验证没有链接存在。