jQuery超链接-href值?

Posted

技术标签:

【中文标题】jQuery超链接-href值?【英文标题】:jQuery hyperlinks - href value? 【发布时间】:2010-10-17 18:49:15 【问题描述】:

在我的网站上,我使用 jQuery 来挂钩元素的事件,即超链接。由于这些超链接只对当前页面执行操作,并没有指向任何地方,所以我一直在:

<a href="#">My Link</a>

但是在某些浏览器中,这会导致页面从右滚动到顶部,这显然是不受欢迎的行为。我试过使用一个空白的 href 值,或者不包括一个,但是鼠标在悬停时不会变成手形光标。

我应该在里面放什么?

【问题讨论】:

只需使用 CSS 来获取悬停手形光标:cursor:pointer,您将在所有链接上获得手形,无论如何。 伪链接将您带到哪里?你是滚动页面,还是去其他锚点? 【参考方案1】:
$('a').click(function (event) 
 
     event.preventDefault(); 
     //here you can also do all sort of things 
);

然后你可以输入任何你想要的href,jQuery会触发preventDefault()方法,你不会被重定向到那个地方。

【讨论】:

.live() 可能是一个更好的方法。 .live() 是没用的,除非他通过 JS 将锚点放在 DOM 中(例如:AJAX 请求) 为什么不只是return false; @David 那将不是 jQuery。我们不能这样! @RoToRa?如何在事件上使用 jQuery 的 return false 行为来防止浏览器的默认操作和事件冒泡非 jQuery?【参考方案2】:

那些仅仅为了提供点击事件而存在,但实际上并不链接到其他内容的“锚点”实际上应该是 button 元素,因为它们才是真正的元素。

可以这样设置:

<button style="border:none; background:transparent; cursor: pointer;">Click me</button>

当然,点击事件可以附加到按钮上,而不必担心浏览器会跳到顶部,也无需添加无关的 javascript,例如 onclick="return false;"或 event.preventDefault() 。

【讨论】:

这应该被赞成。这可能是对 OP 最正确的答案。 我同意。这是一个更好的主意。 有趣的方法,但按钮不是链接。您不能右键单击按钮并选择“在新选项卡中打开”,这是一种常见的浏览习惯。 应该包含一个有效的 href="" 应该被 javascript 覆盖(如果 js 处于活动状态)。如果我们只想要一个 Ajax 请求,那么这种方法是最好的。【参考方案3】:

你真的应该在里面放一个真正的链接。我不想听起来像个书呆子,但这是一个相当糟糕的习惯。 JQuery 和 Ajax 应该始终是您实现的最后一件事。如果您的链接无处可去,则说明您做的不对。

我不是在破坏你的蛋蛋,我的意思是出于好意。

【讨论】:

他真正应该做的是将链接指向将执行非javascript等效项的位置。然后覆盖 jQuery 中的操作。我在这方面很强大...... 我会非常小心,因为这种对话很快就会失控。我向你保证,我无意伤害或侮辱任何人。但是对于一个网站,我想不出在任何场合都有一个无处可去的链接是有意义的。 我自己做过,谁没有做过,当代码中不相关部分的 javascript 错误导致一切崩溃时,我也被咬了一百次,或者,当页面加载缓慢但人们快速按下按钮时。所以现在,我不再这样做了。 如果您没有真正的链接,就不可能优雅地失败,而且大多数搜索引擎可能永远不会抓取这些页面,尽管有些可以正确解析 JS,但不能保证。 尽管不使用链接会有更好的方法,但作者可能会在没有机会重新设计的情况下维护或修改某些内容,在这种情况下,原始问题需要直接回答;当然,这个答案在开始项目时作为一般知识的最佳实践是很好的,所以它是这个线程中很好的支持材料。我确实认为它被高估了。【参考方案4】:

为什么要使用&lt;a href&gt;?我是这样解决的:

&lt;span class='a'&gt;fake link&lt;/span&gt;

并设置样式:

.a text-decoration:underline; cursor:pointer;

您可以使用 jQuery 轻松访问它:

$(".a").click();

【讨论】:

我猜它被否决了,因为它感觉有点恶心。这种编码对你来说是不是有点“烟雾缭绕”的感觉?我喜欢使用带有 javascript 和 CSS 的合理标准的 html,在上面添加美感。一个链接就是一个链接——它不是一个“a”类跨度。 -1:当 HTML 中存在语义和功能等价物时,不要使用带有 CSS 的无语义 HTML 来伪造语义默认行为的视觉效果。庞大是对的。 我也不同意反对票。如果使用跨度捕获事件是错误的,那么为什么 jQuery 在其官方文档中使用类似于此答案的解决方案? docs.jquery.com/Events/bind#typedatafn。实际上,由于链接可以到达页面中的任何位置,我认为使用跨度比锚标记更好。如果他用p代替span,你会怎么想?我确实相信在这个例子中,这个类应该有一个更好的名字,而不是“假装锚”。 这很糟糕,如果你有一个链接,它应该是一个 标签。不是伪装成 的跨度,无论如何这样做都是没有意义的。 @GmonC,jQuery 的官方文档经常是裤子。当然,您可以将 DOM 事件附加到任何元素,但这并不意味着当有更合适的语义元素已经具有所需的行为时,您应该替换通用/非语义元素。在这种情况下,链接 (&lt;a&gt;) 也不合适(如 gargantuan 所说)。 &lt;button&gt; 是最合适的元素(如 Talentmrjones 所说)。【参考方案5】:

将 return false 添加到单击处理程序的末尾,这可以防止发生尝试重定向页面的浏览器默认处理程序:

$('a').click(function() 
// do stuff
return false;
);

【讨论】:

感谢您指出,javascript: 解决方案都不起作用。哎呀!【参考方案6】:

使用 jquery,您可能只想获取带有 '#' 的那些

$('a[href=#]').click(function()return false;);

如果你使用最新的jquery(1.3.x),页面变化时无需重新绑定:

$('a[href=#]').live('click', function()return false;);

【讨论】:

【参考方案7】:

你应该使用&lt;a href="javascript:void(0)" &gt;&lt;/a&gt; 而不是&lt;a href="#" &gt;&lt;/a&gt;

【讨论】:

一个常见的错误是忘记&lt;a href="javascript:void(0);" &gt;&lt;/a&gt;中的分号 href 中的 javascript 通常是一种不好的做法 这对我来说是完美的解决方案。我处理的锚点是由第三方 html 生成器生成的,因此我无法更改为按钮或任何其他与锚点不同的方式,但我可以轻松替换 #【参考方案8】:

想知道为什么之前没有人在这里说过:为了防止 &lt;a href="#"&gt; 将文档位置滚动到顶部,只需使用 &lt;a href="#/"&gt; 代替。那只是 HTML,不需要 JQuery。使用event.preventDefault(); 实在是太过分了!

【讨论】:

【参考方案9】:

我知道这是旧的,但哇,有一个如此简单的解决方案。

完全删除“href”,只需添加一个执行以下操作的类:

.no-href  cursor:pointer: 

就是这样!

【讨论】:

【参考方案10】:

几乎遇到了这个问题,而且非常欺骗。我正在提供一个答案,以防有人在我同样的位置结束。

    以为我遇到了这个问题 但是,我使用的是 return false 和 javascript:void(0); 然后问题的明显差异不断浮出水面: 我意识到它不会一直到顶部 - 而且我的问题区域位于页面底部附近,所以这种跳跃既奇怪又烦人。 我意识到我正在使用fadeIn() [jQuery 库],在短时间内我的内容是 display:none 然后我的内容扩大了页面的范围!导致看起来像跳跃! 现在使用可见性隐藏切换..

希望这能帮助那些被跳跃困住的人!!

【讨论】:

【参考方案11】:

相反,您可以简单地使用如下所示的 href:

<a href="javascript:;">My Link</a>

它不会滚动到顶部。

【讨论】:

像这样的内联 JS 不是很好。最好使用 preventDefault。更容易维护,更少的黑客攻击。【参考方案12】:
<a href="#nogo">My Link</a>

【讨论】:

我不知道你们为什么投了反对票,但你们试过吗????这实际上有效。如果没有 id 为“nogo”的元素,则页面不会滚动。 @user3368506 - 答案很可能在编辑之前被否决

以上是关于jQuery超链接-href值?的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何进行超链接

如何使用 jQuery 更改超链接的 href 属性

如何使用 jQuery 更改超链接的 href? [复制]

jquery动态设置图片路径和超链接href属性

使用 jQuery 禁用超链接

jQuery 预先添加到链接到 PDF 文件的所有超链接元素