2012-02-13 18 views
6

私がしたいことの例:Facebookでは、リンクをクリックすると現在のタブでリンクをクリックすると、リンクを開くのではなくJavaScriptがトリガーされます。しかし、新しいタブで(右クリックするかCtrl/Cmdを押して)開くと、Javascriptを呼び出さずにリンクが開きます。現在のタブで開かれたリンクと新しいタブとの区別

私は自分のリンクで同じことをしたいと思います(リンクの動作はターゲットに依存します)。私はリンクを開くことを避けるためにonclickイベントハンドラreturn false;を持っています。 Ctrl +クリックするとリンクを開くことができなくなります。これをどのように達成するのですか?

編集:I のリンクを強制的に新しいウィンドウで開きたくない。 IF新しいウィンドウでリンクを開くと、いつものようにhrefに従ってください。ただし、IF現在のウィンドウのリンクをたどるのではなく、現在のウィンドウのリンクがで開かれているので、Javascriptを実行します。

Facebookは、現在のウィンドウで開いた場合はポップアップ "シアター"で画像を開き、新しいウィンドウで開くと画像をフルページで開きます。

イベントをリンクにキャプチャし、preventDefault()またはreturn falseを使用すると、Cmd +クリック(新しいタブで開く)が失敗することに注意してください。いずれにせよ、これは関係なく、リンクが開かれた方法の動作するはずです - など、キー入力し、クリックし

EDIT 2:hashchange/HTML5 pushStateこの

+0

あなたは新しいウィンドウで常に開いへのリンクをしたいですか? – ShankarSangoli

+0

すべてのアンカーでターゲットを '_blank'に変更するだけですか? – ZeroDivide

答えて

3

することができますについては移動するための正しい方法であると思われます正しいURLを示すアンカーのhrefを設定します。このようにして、右クリックして新しいタブまたはウィンドウで開くと正常に動作します。

このように、clickイベントハンドラをアンカーにバインドするためにjQueryを使用します。

$('a').click(function(e){ 
    //Do whatever javascript operation you want. 
    if(!e.ctrlKey){ 
     e.preventDefault();//Stop the page to navigate to the url set in href 
    } 
}); 

Demo

+0

* anchors *( 'name'属性を持つ' A'要素)であるナビゲーション用のソースである* links *( 'A'要素と' href'属性)を混同しないでください。行き先'A'要素は同時に* link *と* anchor *の両方になりますが、一般的ではありません。 – RobG

+0

それは要件に依存しますが、私たちはリンクをリンクとして振る舞わせるべきです。 – ShankarSangoli

+0

Cmd + Clickでリンクが開けない場合は、 –

関連する問題