2016-11-30 6 views
0

<a href="">のクリックを聞き、データ属性からのリンクで置き換えるJavaScript(jQuery)コードを実行しています。JavaScriptウィンドウの場所ユーザーが望むときにのみ新しいタブ

<a class="js-external" href="http://www.google.com/" data-href="/tracking.php?url=http://www.google.com/">Google</a> 
<script type="text/javascript"> 
    $('a.js-external').click(function(e) { 
     var hrefNew = $(this).attr('data-href'); 

     if (hrefNew) { 
      e.preventDefault(); 
      window.location.href = hrefNew; 
     } 

    }); 
</script> 

これは意図したとおりに動作しますが、ブラウザの動作が一部壊れます。ユーザーがctrl + clickさんのリンク上にある場合(新しいウィンドウで開く場合)、URLは同じウィンドウで開かれます。

通常のブラウザを壊すことはできますか?また、ユーザーがctrlを押さえていることを検出してから、window.open()を使用する必要がありますか?

+1

''(e.ctrlKey)window.open(...)であれば? –

+0

はい、私はそれを行うことができます。しかし、私はまた、macのために 'metaKey'を追加する必要があります。より良い方法はありませんか? – DenverCoder9

答えて

0

あなたは e.preventDefault();

でデフォルトの動作を妨げているので、あなたがあなたの質問で述べたように、あなたがコントロールキーと新しいウィンドウで開くを押して追跡する必要が発生します。あなたがそうすることを希望しない場合は

if(e.ctrlKey) 
    window.open(hrefNew) 
    else 
    window.location.href = hrefNew; 

はしかし、その後、最も簡単な方法は、動的アンカーのhref属性を設定することです。

$('a.js-external').click(function(e) { 
    var hrefNew = $(this).attr('data-href'); 
    if (hrefNew) { 
     $(this).attr("href",hrefNew); 
    } 
}); 

https://jsfiddle.net/tintucraju/go44o3o3/

+1

ありがとう!実際のhref値を置き換えることが最も効果的なようです。 'ctrlKey'を検出するだけでは、中マウスのクリック、' metaKey'などもありません。私はそれが検出されないクリックは、右のマウス - >新しいタブで開くと思います。 – DenverCoder9

関連する問題