2017-08-25 18 views
3

私は、特定のアンカー要素のリンクを傍受し、それらを追跡したいとします。私は次のものを持っています。中間クリックと新しいタブリンクのクリックをインターセプトできますか?

HTML

<a href="/foo" data-mytracking="fooclicked">go to foo</a> 

JS

$('a[data-mytracking]').click((event) => { 
    event.preventDefault(); 
    // Do some synchronous code to log tracking 
    console.log(event.target.getAttribute('data-mytracking'), event.target.href); 
    window.location = event.target.href; 
}); 

「新しいタブで開く」ミドルクリックや右クリックを傍受まだこのクリックコードを持ってする方法はありますか?私がhref="javascript:void(0)"を作ったら、私はこれを行うことができることを知っています。しかし、人々は新しいタブで開く能力を失う。

+0

rmbとmmbのキーコードを調べ、これらのキーのリスナーを追加することができます。それから、preventDefault()を呼び出して、データのマイトラッキング値を取得します。 –

答えて

3

ブラウザによっては、auxclickeventがあります。 event.whichto track middle buttonも追跡できます。コンテキストメニュー経由

$("a[data-mytracking]").on('click', function(ev) { 
    if(ev.which== 2) { 
     e.preventDefault(); 
     // do smth else 
    } 
}); 

オープニングは、おそらく追跡可能ではないですが、あなたはoncontextmenuイベントを持つことができます。

P.S.少なくともChromeは、中央のボタンで新しいタブを開くときにクリックを誘発しません。しかし、それはmouseupをトリガーします。

+1

あなたは、中クリックを妨げるのと同じ方法で、oncontextmenuイベント全体をブロックすることができます。 addEventListener( 'click'、ev => {//ここでevと同様のことをする}) '、。コンテキストメニューからアクションをブロックすることは、少なくともChromeでは不可能です。私は他のブラウザを知らない。 – SethWhite

+1

プレーンjsは、ブラウザごとに異なる 'which'を持っています。 'jquery'はそれを共通にします –

+0

ただそれを利用できるようにして、どちらが良いか言っていません。そして、FirefoxとChromeの間では、少なくとも.whichは一貫性があります。 – SethWhite

関連する問題