2012-01-01 10 views
2

divには、divを隠すonclickがあります。は、onclickイベントを持つdivの中にリンク機能を保持します。

divの中にリンクがある場合、onclickがクリックを盗み出すため、リンクが機能しません。

希望の結果:div内の任意の場所でクリックが行われた場合、divが非表示になるリンク。リンク上でクリックが行われた場合、_blankウィンドウでリンクを開き、divを表示したままにします。

javascriptでこれを処理する方法はありますか?

+1

本質的に同じもの:http://stackoverflow.com/questions/387736/how-to-stop-event-propagation-with-inline-onclick-attribute –

答えて

2

DEMO

、あなたがevent.stopPropagationを呼び出したい、または真のいずれかにe.cancelBubbleを設定しますあなたのブラウザが好きです。これにより、あなたの部門にバブリングすることを防ぐことができます。

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

デモが動作しません。こんにちは、 "DIV"アラートをクリックすると警告が表示されます –

+0

実際はFFでは動作しませんが、Chromeでは動作します。 –

+0

@UnoMeinAme - 私の答えは –

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マッシュは機能しません。 'click()'は 'getElementById()'コンテキストには存在しません。 –

0

リンクを制御する場合、最も簡単な方法はonclick = "event.stopPropagation();"を追加することです。リンクのデフォルト効果を妨げることなく、divを停止させないようにします。

また、リンクにテキストのみが含まれている場合、divのクリックイベントでイベントのターゲットのタグ名を確認してリンクかどうかを確認できますが、もっと複雑なものがある場合は、ドームツリーをイベントターゲットからdivに移動して、リンクが存在しないことを確認します。

関連する問題