9

首先,我没有真正的问题。我只是出于好奇才问这个。

在同一个链接中使用时javascript:void(0),我不小心遇到了一个奇怪的行为,就像这样。target="_blank"

<a href="javascript:void(0);" target="_blank" /> Link </a>

我发现Chrome当您单击链接时,它可以正常处理此问题并且不执行任何操作,同时IE打开Firefox一个空白的新选项卡。

我的问题是,不javascript:void(0)应该阻止从链接触发任何点击事件,即使它针对新标签/窗口?为什么要target="_blank"覆盖它?

另外,如果我href用某种后端语言填充属性并且我更喜欢target="_blank"在属性旁边进行硬编码,那么最好的方法是什么href

4

2 回答 2

3
<a href=# onclick="return false;">I look like a link!</a>

一直用这个。

编辑:对于您关于 void(0) 的问题,onclick 应该比 href 属性具有更高的优先级,因为它提供了更丰富的功能并且能够实际阻止 href 操作 - 因此我的return false. 如果存在 onclick 事件,则 href 仅适用于机器人和旧浏览器。

此外,是否使用格式奇特的 URL 执行常规导航由浏览器自行决定。如果链接以哈希开头,它应该只是跳转到书签。但是当它为空或包含其他协议时,这一切都取决于浏览器是否决定尝试访问新文档。输入javascript:伪协议传统上用于希望与当前页面一起工作的书签,因此任何javascript:不这样做document.write()或其他破坏性修改都应该使页面不重新加载。

EDIT2:我不确定你在href中的后端语言是什么意思,但是data-如果它在逻辑上不属于href属性,请考虑HTML有效的属性给你的代码一些可以使用的东西。

于 2014-06-20T19:01:19.947 回答
1

我已经通过使用简单的技巧解决了这个问题。它可能有用。

我已经根据链接动态删除了目标属性。即,如果链接未定义或为空或 javascript:void(0),那么我们将使用以下代码删除目标属性。

如果链接是正确的,我们将为该超链接添加目标属性(“第二个 if 条件”会这样做,因为在我的页面中链接是动态的)。

我已经复制了示例 html 文件(Test.html)。如果我们要删除页面的 onload 属性,请复制此文件中的脚本代码并将其粘贴到所需文件的末尾。

如果我们想将其应用于动态链接,我们必须将此代码放在一个函数中,并在需要时调用它。

此代码将适用于该页面中的所有超链接。我们可以通过使用类或任何其他属性将其限制为特定的链接集。

Test.html
---------

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<a href="javascript:void(0);" target="_blank">Link1</a>
<a href="javascript:void(0);" target="_blank">Link2</a>
<a href="www.url1.com" target="_blank">Link3</a>
<a href="www.url2.com" target="_blank">Link4</a>

<script>
$("a").each(function() {

if(typeof(this.href) == 'undefined' || this.href == 'javascript:void(0);') {
    $(this).attr('href', 'javascript:void(0);');
    $(this).removeAttr('target');
}
if(typeof(this.href) != 'undefined' && this.href != 'javascript:void(0);') {
    var s_link = this.href;
    if (s_link.indexOf('http://') === -1 && s_link.indexOf('https://') === -1) {
        s_link = 'https://' + s_link;
    }   
    $(this).attr('href', s_link);
    $(this).attr('target', '_blank');
}

});
</script>
于 2016-11-03T06:54:21.237 回答