使用JavaScript代替超链接

7
随着RIA和SPA(或使用大量JavaScript的Web应用程序)变得越来越流行,我遇到了一些系统,它们不使用传统的超链接,而是使用带有JavaScript代码的构造来操作导航。这在图片方面尤为明显。
例如,我们不会看到像这样的东西:
<a href="some_url"><img src="...."/></a>

<div ... onclick='SomeJsFunctionThatNavsToAnotherPage()'><img src="..."/></a>

这样做的优点是什么?调试或查找错误时,很难追踪页面转换到哪里。当目标导航可能发生变化时,我可以理解这个想法(因此,您可以使用计算函数来导航到哪个页面)。但是,即使要导航到的页面是恒定的,我仍然看到这种模式。我觉得这非常复杂和难以测试。更不用说总会有浏览器特定的错误,这些错误来自于过度复杂化前端。但是,我不是RIA / SPA开发人员(只是后端和传统Web开发)。我错过了背后的原理吗?

澄清

我的问题不是针对我们想要重新绘制页面或在不改变当前位置的情况下更改当前内容的情况。我的问题是针对普通的页面转换,从页面A到页面B。

在这种情况下,为什么要使用onclick=funcToChangeLocation()而不是<a href="some location"/>

当我调试已经编写好的系统时,这对我来说是一个痛点(因为我不会像那样编写它们),但可能有我不知道的原因。

再次强调,我的问题不是针对自己重新绘制而不改变浏览器位置的页面,而是针对从一页导航到下一页的情况。


同样

如果您要投票关闭此问题,请至少留下一条消息解释原因。


1
不建议使用具有点击处理程序的div,因为这样做会使功能对只使用键盘的用户无法访问。(使用具有点击处理程序的锚点导航到某个计算目标是可以接受的。) - nnnnnn
很好。但是当你知道目标在大多数情况下是静态的,并且当页面中锚点的唯一功能是简单地转换到另一个页面(没有副作用)时,使用带有单击处理程序的锚点与使用带有普通 href 的锚点相比有什么好处? - luis.espinal
如果点击处理程序没有添加任何超出普通锚点所能做的事情,那么我根本看不到任何意义。 - nnnnnn
关于关闭投票的原因,投票者选择的原因是这个问题的答案主要基于个人意见(Stack Overflow不鼓励以意见为导向的问题)。我没有对这个问题进行投票,但当我投票关闭问题时,我不会留下评论,因为如果一个问题实际上被关闭了,大多数投票者选择的原因将自动显示。(尽管有时我认为一个问题应该因为不同的原因而关闭。) - nnnnnn
1
除非谈论严格的数学构造,否则软件设计中的大多数决策都将基于某种经验证据支持的观点。我可以理解为什么我的问题可能会引起基于观点的问题。但这就是我的困境所在——我找不到任何合理的解释,说明某些事情对我的工作产生了负面影响。但我对这个领域(重 JS 网页设计)的了解还不够深入,无法确定我是否看到了反模式,或者是否存在我所不知道的实际技术原因。 - luis.espinal
@nnnnnn 是正确的,这是一个主观问题,无法分配“正确”的答案。Stackoverflow 旨在发布您需要帮助的代码。 - Daniel Williams
2个回答

5
如果您正在开发一个Web应用程序,有时您不想将用户重定向到另一个页面,而是想在不刷新页面的情况下动态更改页面内容。这样做有一些优势。它可以更快地加载页面。您可以轻松地保持页面/应用程序的状态。您没有义务与服务器通信。您只需更新页面的某个部分即可。
您还可以动态请求数据以打印页面。如果您正在显示用户资料页面,您只需请求代表该用户的Json对象。该Json对象比整个页面要小,并且将在动态渲染中使用。在您的带宽受限时,它有助于减少用户与服务器之间的数据传输量。
编辑:在简单页面重定向的情况下,我认为这是一个不好的实践,我看不到任何优势。当Google爬虫尝试解析网站时,我认为它使网站变得混乱。

我理解你所描述的内容,即在不更改当前页面的情况下动态重新绘制内容的用法。我的问题是关于简单导航的;从页面A跳转到页面B。为什么要使用带有函数的onclick而不是a href - luis.espinal
1
感谢您的澄清。 - luis.espinal

2

我曾经拥有一个相当成功的网站目录网站。有一天,Google认为“目录”是竞争对手,开始惩罚那些在目录上有链接的网站。我使用了你描述的方法来隐藏外部链接,试图欺骗Google。


我可以理解这是一个合法的用途。但是我的问题是关于那些不会被谷歌索引的内部应用程序。 - luis.espinal
1
我能想到的唯一原因是,如果您想在鼠标悬停时隐藏状态栏中的URL。 - Daniel Williams
啊,我没有想到那个。那可能是一个合法的要求。谢谢。 - luis.espinal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接