2009-10-15 97 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框架

相关问题