2012-02-13 96 views
6

我想要做的例子:在Facebook上,單擊在當前標籤中打開鏈接的鏈接將觸發一些Javascript而不是打開鏈接。但是,在新選項卡中打開它(通過右鍵單擊或按住Ctrl/Cmd)將打開鏈接而不調用任何Javascript。區分在當前標籤中打開的鏈接與新標籤

我想對我的鏈接做同樣的操作(鏈接行爲取決於目標)。我有onclick事件處理程序return false;以避免打開鏈接;但是這會導致Ctrl +單擊無法打開鏈接。我如何實現這一目標?

編輯:我不想鏈接強制在新窗口打開。 如果鏈接在新窗口中打開,我希望它像往常一樣跟隨href。但是,IF鏈接在當前窗口中打開,而不是在當前窗口中的鏈接,我想要一些Javascript運行。

如果您在當前窗口中打開它,並在整個頁面中打開它,如果您在新窗口中打開它,Facebook會打開彈出式「影院」中的圖像。

請注意,捕獲鏈接上的click事件並使用preventDefault()return false會導致Cmd + Click(在新選項卡中打開)失敗。在任何情況下,本應不論如何鏈接打開工作 - 點擊,回車鍵等

編輯2:看來hashchange/HTML5 pushState的是去了解這個

+0

你想在新窗口中的鏈接總是打開? – ShankarSangoli 2012-02-13 01:23:29

+0

你不能只將目標更改爲所有錨上的'_blank'? – ZeroDivide 2012-02-13 01:27:17

回答

3

你可以正確的方法設置錨點的href指向正確的網址。這種方式右鍵單擊並打開一個新的選項卡或窗口將工作正常。

使用jQuery將click事件處理程序綁定到錨點,如下所示。

$('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

請不要混淆作爲導航源的* links *(它是'A'元素和'href'屬性),而* anchors *(它們是具有'name'屬性的'A'元素),它們是目的地。 'A'元素可以同時是*鏈接*和*錨*,但並不常見。 – RobG 2012-02-13 03:18:08

+0

這取決於要求,但是我們應該讓鏈接表現爲鏈接。 – ShankarSangoli 2012-02-13 03:52:13

+0

Cmd +點擊無法打開鏈接當我這樣做 – 2012-02-13 07:28:52

相關問題