2010-04-09 49 views
7

我想在新窗口中使用Jquery而不是_blank打开几个链接,所以我的html仍然有效。我的代码如下所示:用Jquery在新窗口中打开链接

$(document).ready(function() { 
    $('a[id="external-url"]').click(function(){ 
     $(this).attr('target','_blank'); 
    }); 
}); 

这个工作当链路被包含在HTML中除了就好我已经把使用jQuery load()方法在页面上。任何人都可以解释为什么,请帮助解决方案?

回答

15

更新:如果你在一个HTML5 +世界the target attribute is no longer deprecatedno longer missing, to be more accurate)作为it was in XHTML 1.0阅读本(原题的上下文)。我建议如果你现在正在阅读这个,忽略下面的所有内容,使用target属性是否引发合规性警告,所有的浏览器都支持它,它永远不应该被排除在外......事实上它是在稍后的规范中加入显示删除它是一个错误。


这将工作:

$('a#external-url').live('click', function(){ 
    $(this).attr('target','_blank'); 
}); 

然而,ID应该是唯一的,如果你加载超过1,他们需要有一个类来代替,就像这样:

<a href="http://google.com" class="exteral-url">Google</a> 

和jQuery这样的:

$('a.external-url').live('click', function(){ 
    $(this).attr('target','_blank'); 
}); 

符合标准的方法是:

$('a.external-url').live('click', function(e){ 
    window.open(this.href); 
    e.preventDefault(); //or return false; 
}); 
+0

@尼克再次感谢! – mtwallet 2010-04-09 09:50:48

+1

-1 _blank已被弃用!即使您正在通过使用脚本添加属性来解决验证问题。 – 2010-04-09 11:40:03

+0

@詹姆斯 - 我正在解决OP没有约束的问题。如果他们想绕过验证,这是他们的呼吁,而不是我的,这个问题是关于JavaScript不工作。作为一个侧面说明,*通常*我同意,但是'_blank'被弃用是W3C方面轻度迟钝的错误。我敢打赌,从现在开始的5年内,我会赌100美元**每个**浏览器都会支持'_blank'。 – 2010-04-09 11:44:32

1

使用.live()

$('a[id="external-url"]').live("click", function(){ 
     $(this).attr('target','_blank'); 
    }); 

您的代码将绑定单击事件,这都可以在页面加载,而不是动态创建的元素的元素。 Live会将事件绑定到也是动态创建的元素。

1

相反其他国家认为,在target属性及其所有值都不赞成每HTML5规范。

可以读取它约在这里:http://dev.w3.org/html5/markup/a.html

的一个元素上的目标属性已被废弃在以前 HTML版本,但不再反对,因为它在网络有用 应用,特别是结合iframe元素。

因此,请随意在HTML5中使用它。

+0

太棒了!看起来像W3C意识到他们的错误:P – 2012-07-19 13:37:24

+0

这不完全准确(关于这个问题的原始上下文)。它*在XHTML中被弃用(缺少,但你会听到它被弃用),它在后来被重新添加到XHTML中(我完全同意它,它从来不应该被弃用)。 – 2012-07-19 14:24:07

+0

是的,它已被弃用,但截至目前,在HTML5中,它是允许的。 – Tower 2012-07-19 15:31:23