浏览器打开javascript:void(0)和onclick链接

时间:2014-03-05 19:23:28

标签: javascript firefox onclick href

我在HTML中的锚标记中嵌入了一个图像。问题是,当我点击图片时,我有两个打开的标签,而不是一个。

问题

打开两个标签,一个带有正确的链接,另一个是空白标签(地址栏中的about:blank)。

相关示例代码

<a href="javascript:void(0)" onclick="window.open('http://www.google.com');">
   <img src="..." />
</a>

我尝试了什么

我立即看到onclick事件丢失return false;,因此我添加了它。现在window.open函数后跟return false;,但问题仍然存在。

我尝试将javascript:void(0);替换为#中的href,但问题仍然存在 - 只是这一次而不是空白标签,我得到一个内容相同的新标签页我在单击链接的选项卡中有。

我也尝试用javascript:void(0)替换javascript:;,但结果相同。

此外,我尝试使用event.preventDefault(); - 再次,没有得到预期的结果。

解决方法

我发现如果删除href属性并且只有onclick属性,则按预期工作。虽然这提供了想要的结果,但我并不喜欢它。我也知道使用javascript:void(0)也不是好习惯,但我不会在这做出所有决定。

注意事项

  • 这只发生在Firefox和IE(v27和v11)上。在Chrome中它可以工作 精细。
  • 代码来自XSLT样式表,但生成的XHTML 看起来与示例代码相同。
  • <img>元素不包含任何会影响此内容的内容。

你们有谁知道为什么会这样?有解决方案吗虽然jQuery是可行的,但我不想使用任何第三方库。提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果有人遇到此问题,则问题是<img>标记附加了一个深度连接的onClick事件处理程序。因此,每当我点击<a>标记时,我都会调用两个onclick操作 - 来自<a>标记的操作,另一个来自<img>标记。我通过调用一个新的JS函数并将其附加到<a>标记,将事件作为参数传递来解决了这个问题,该函数包含event.stopPropagation();