2010-04-09 48 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