2017-08-25 71 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 
    } 
}); 

通過contextmenu打開可能不可追蹤,但您可以有oncontextmenu事件。

P.S.至少Chrome不會觸發點擊打開一箇中間按鈕的新標籤。但它確實觸發了mouseup

+1

您可以阻止整個oncontextmenu事件,就像阻止中間點擊一樣。也可以使用普通的js選擇'document.querySelector('.css-selector')。addEventListener('click',ev => {//在這裏執行類似的事情})''。至少,在Chrome中只能屏蔽上下文菜單中的操作是不可能的。我不知道其他瀏覽器。 – SethWhite

+1

普通js針對不同的瀏覽器有不同的'which'。 'jquery'使它普遍 –

+0

只是使它可用,並不是說哪個更好。至少在Firefox和Chrome中,「.which」是一致的。 – SethWhite