2009-11-29 91 views
1

在某些情況下,我想在同一窗口中打開鏈接,而在其他情況下,我想在新窗口中打開它們。我有以下的jQuery代碼:jQuery attr方法未能添加屬性

if (internal) { 
    jQuery(".main a").removeAttr('target'); 
} else { 
    jQuery(".main a").attr('target', '_blank'); 
} 

我已經包含在「主」分區2 <a>秒。一個直接在div下,另一個埋在一些子div下面。運行時,它只會將空白目標添加到第一個<a>標記。但是,當我通過Firebug設置斷點並逐步完成時,一切正常。有沒有理由不能全速運轉?什麼是解決方法?

+1

找到最小的HTML樣本,您可以在其中重現此內容並將其發佈到此處。問題聽起來有點奇怪,不應該真的發生。 HTML是否有效? – jitter 2009-11-29 20:19:02

+1

我同意,這可能是錯誤的HTML語法 – Ayyash 2009-11-29 20:25:07

+0

不,HTML驗證爲有效。另外,要把控制簡化成可能的東西並不容易。但我會考慮這一點。 – 2009-11-30 02:43:21

回答

1

是對onload事件期間執行的特定代碼?在jQuery中,您通常使用$(document).ready()。例如。

$(document).ready(function() { 
    // Do stuff onload. 
}); 

否則,在HTML DOM樹仍未完全建立並初始化時,它會立即執行。

+0

+1一個很好的推理。我同意這聽起來像是這個問題。 – 2009-11-29 20:37:09

+0

優秀的理論,但沒有。該功能是由於在頁面上點擊而運行的。您單擊縮略圖圖像,「主」區域顯示一個大圖像。點擊圖片會將您發送到外部網站或其他內部網頁。但是,也有一個按鈕具有相同的鏈接。那是不行的。 – 2009-11-30 02:40:55

+0

好吧,明白了。實際上有一個動畫將按鈕放置到位,並且全速運行時,attr函數運行時並未完成。斷點改變了時間,所以一切正常。這個答案非常接近,所以我打電話說得對。 – 2009-12-01 23:39:43

0

嘗試使用each()到步驟通過A元素:

jQuery(".main a").each(function() { 
    $(this).attr('target', '_blank'); 
}); 
+1

他不應該那樣做。設置屬性會影響所有選定的元素:http://docs.jquery.com/Attributes/attr#keyvalue – 2009-11-29 20:20:25

+0

我確信這會起作用,但它具有相同的行爲。它在正常情況下不起作用,但是當我放置一個斷點時,一切都很好。 – 2009-11-30 02:44:32