2009-10-15 119 views
113

當用戶點擊鏈接時,我需要更新數據庫中的字段,然後在新窗口中打開請求的鏈接。更新沒有問題,但我不知道如何打開新窗口而不需要點擊另一個超鏈接。如何在JavaScript中模擬target =「_ blank」

<body onLoad="document.getElementById('redirect').click"> 
<a href="http://www.mydomain.com?ReportID=1" id="redirect" target="_blank">Report</a> 
</body> 
+1

嗯? 'target =「_ top」'不會在新窗口中打開 - 'target =「_ blank」'。 – Tomalak 2009-10-15 17:53:51

+0

如果鏈接已經在新窗口中打開(由於target =「_ blank」),並且javascript click處理程序已在更新數據庫,爲什麼需要使用Javascript打開新窗口? – 2009-10-15 21:05:04

回答

208
<script> 
    window.open('http://www.example.com?ReportID=1', '_blank'); 
</script> 

第二個參數是可選的,是目標窗口的名稱。

+1

'window.open'完成'target =「_ blank」'的操作 - 它在新窗口中打開URL。 – ceejayoz 2009-10-15 18:13:40

+2

是的。 window.open()的第二個參數是要給窗口的「名稱」,類似於在鏈接上設置目標。 https://developer.mozilla.org/En/DOM:window.open – 2009-10-15 18:13:58

+1

哦,我明白了。 window.open被Firefox彈出窗口阻止程序阻止,但是target =「_ blank」不是。 我應該問客戶從他們自己的網站啓用彈出窗口嗎? – 2009-10-15 18:22:59

2

您可以從標籤中提取的href:

window.open(document.getElementById('redirect').href); 
7

我知道這是一個做整理了交易,但這裏是我用來解決我的應用程序的問題是什麼。

if (!e.target.hasAttribute("target")) { 
    e.preventDefault();  
    e.target.setAttribute("target", "_blank"); 
    e.target.click(); 
    return; 
} 

基本上這裏發生的是我運​​行檢查,如果鏈接有target=_blank屬性。如果沒有,它會阻止鏈接觸發,將其設置爲在新窗口中打開,然後以編程方式點擊它。

你可以走一步,並跳過了原始點擊的停止(和使你的代碼一大堆更加緊湊)通過嘗試這樣的:

if (!e.target.hasAttribute("target")) { 
    e.target.setAttribute("target", "_blank"); 
} 

如果您正在使用jQuery的抽象掉的實施添加屬性跨瀏覽器的,你應該使用這個的e.target.setAttribute("target", "_blank")

jQuery(event.target).attr("target", "_blank") 

您可能需要返工,以滿足您的實際使用情況,但在這裏就是我劃傷了我自己的癢。

這裏有一個demo它在行動中讓你陷入困境。

(中的jsfiddle鏈接回來這個討論..不需要一個新的標籤:))

6

我個人比較喜歡使用下面的代碼,如果它是一個單一的鏈接。否則,如果你使用類似的代碼創建一個函數,這可能是最好的。

onclick="this.target='_blank';" 

我開始使用它來繞過W3C的XHTML嚴格測試。

+0

我認爲內聯JavaScript比添加可在任何地方工作的「非標準」屬性更加混亂。 – 2013-08-14 14:24:37

+0

@MattiVirkkunen在某些情況下,它是唯一的解決方案 – 2015-08-11 13:57:33

+0

@Claudiu:如果你發現自己處於這樣一個荒謬的境地,你應該寧願解決它的原因。 – 2015-08-11 16:06:01

5

這就是我用jQuery來做的。我希望在新窗口中打開每個鏈接的課程。

$(function(){ 

    $(".external").click(function(e) { 
     e.preventDefault(); 
     window.open(this.href); 
    }); 
}); 
14

這可能有助於

var link = document.createElementNS("http://www.w3.org/1999/xhtml", "a"); 
    link.href = 'http://www.google.com'; 
    link.target = '_blank'; 
    var event = new MouseEvent('click', { 
     'view': window, 
     'bubbles': false, 
     'cancelable': true 
    }); 
    link.dispatchEvent(event); 
+1

這應該是接受的答案。 – ebilgin 2015-09-30 13:22:26

+0

IE11:「Runtime Javascript error:not the valid action for the object」 – 2016-04-01 13:30:13

+4

這個答案可以通過添加一些描述來改善 – 2016-10-13 18:54:30

1

這可能會幫助你打開的所有網頁鏈接

$(".myClass").each(
    function(i,e){ 
     window.open(e, '_blank'); 
    } 
); 

它將每<a href="" class="myClass"></a>鏈接項目打開另一個標籤,就像您有點擊每一個。

您只需將其粘貼到瀏覽器控制檯即可。需要jQuery框架

相關問題