2012-11-07 48 views
6

我有一個鏈接(錨)具有附加給它一個href導航到一個特定的網址「www.bla.com」。Ctrl +單擊的鏈接與單擊處理

<a href='http://www.bla.com' /> 

我也有一個click處理器連接到執行一些操作,然後打開在同一窗口中的HTML視圖的鏈接。一切都很好。

然而,當用戶使用「Ctrl +單擊」打開一個新標籤/窗口中的鏈接,單擊處理似乎採取優先次序,並打開在同一窗口中的HTML視圖。但我想保留'ctrl + click'行爲並允許用戶在新標籤頁/窗口中打開鏈接(就像普通鏈接一樣)。我怎麼能這樣做?

在此先感謝!

+0

你在你的處理器使用的是?我試着複製它,唯一能找到的就是停止它是一個'alert' – Bankzilla

+0

有許多鍵可以改變默認行爲。你最好使用['filter-altered-clicks'](https://github.com/bfred-it/filter-altered-clicks)來處理它。 –

回答

6
function process(e){ 
    var evt = e ? e:window.event; 
    if(evt.ctrlKey) 
     alert("ctrlClicked"); 
}​ 

evt.ctrlKey將返回true,你可以在寫你的條件「如果」塊,我測試了這Chrome和僅FF。

0
<a target="_blank" href='http://www.bla.com' /> 

將target =「_ blank」添加到錨標籤內。

+0

不工作,我很害怕,因爲_blank打開一個新標籤/窗口中的鏈接,甚至在一個標準的點擊(不是我想要的)。 – Saket

+0

您可以添加一個關鍵偵聽器來檢測ctrl何時被按下,然後根據是否按住它來簡單地更改目標參數。 (舉行?「_blank」:「_self」) –

0

相關的click event object將其ctrlKey屬性設置爲true如果點擊發生時按下控制鍵(或同等學歷)。檢查事件對象,如果按下了控制鍵,則不要執行「HTML視圖」。

<a href="#" onclick="alert(event.ctrlKey);">Click me!</a> 

但是,如果用戶以某種其他方式激活鏈接,您可能會或可能不會收到點擊事件。

例如

  1. 右鍵 - > 「在新標籤/窗口中打開」 - 沒有click事件(火狐,IE)
  2. 標籤集中鏈接,按回車 - 調度單擊事件(火狐,IE)
如果控制鍵被按下
1

也許這樣的事情?

function onclick(e){ 
    var event = e ? e:window.event; 
    this.target = event.ctrlKey?"_blank":"_self"; 
}​