2011-04-13 69 views
4

我有一个lightbox叠加层,我使用下面的命令取消浏览器窗口滚动页面的“#”的href锚点。我有它的工作,所以它不会在初始点击时滚动窗口,但是在关闭lightbox叠加层时,浏览器会滚动到顶部,并且#会附加到URL。返回false onclick锚点不完全正常工作

<a href="#" onclick="somefunction(); return false;">... 

甚至这个...

<a href="javascript:void(0)" onclick="somefunction(); return false;">... 

的联系是其中的onclick功能触发覆盖弹出一个可点击的图像上。

Andy的想法如何防止浏览器在退出叠加层时滚动到顶部?

回答

9

我建议不要使用锚标签。如果你不想要一个HREF值,那么它实际上不是一个到另一个页面的链接,所以可能不是真正的链接。如果该网站必须可以访问sans javascript,那么您需要更多地思考这个问题,并提出一个解决方案,该解决方案将允许一个真正的href值与实际内容链接。

但是,如果你确定这个是一个JS-所需的应用程序,那么你可以这样做:

<a href="javascript:;" onclick="somefunction(); return false;"> 

但是,再说一次,这真是你点击到,而更新UI比去某个地方,所以我只是让它成为一个DIV,给它一个onclick事件,并完成它。但一定要给div一个tabindex,以便它可以通过键盘访问。

+0

onclick =“blah(); return false;”如果blah()中存在错误,则不会停止默认定位标记。添加href =“javascript :;”诀窍。保存我的屁股。谢谢DA。 – mrbinky3000 2012-02-07 15:28:42

+0

'不使用锚标签' - 我不同意。那些不支持JavaScript的浏览器(如Opera mini)呢? “Javascripted”锚是一个很好的跨浏览器解决方案。如果浏览器不支持JavaScript,则可以通过锚定href来完成服务器端的任务。 – matewka 2013-07-15 17:27:49

+0

@matewka我解答了所有的答案。如果你需要支持非JS选项,那么必须有一个实际的href链接到一个实际的页面。 – 2013-07-15 17:41:13

6

您应该避开# href和javascript:伪协议。

链接应始终指向有效的资源。

如果您不能使用像button这样的更合适的元素(如您的示例所示),我会使用event.preventDefault()取消默认行为。

+2

+1好的建议。 – maerics 2011-04-13 05:25:08

+0

使用锚标签来执行JavaScript是一个Web标准。它没有什么问题。即使谷歌同意。 – Amalgovinus 2014-09-27 00:23:36

+0

@Amalgovinus当'button'元素存在时,为什么要滥用'a'元素?关于*在新窗口中打开链接*,*复制链接位置*,*邮寄此链接*以及浏览器提供的所有其他内容,但是如果您决定由于某种原因使它们成为'a'元素,它将无法使用。 – alex 2014-09-29 00:00:31