2009-11-29 92 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