2010-08-26 150 views
1

我在页面上有一组链接。当用户点击一个链接时,它会触发一个异步请求,页面上的内容区域会用响应html进行更新。如何防止中间按钮在浏览器中打开新选项卡?

这工作正常,除非用户用'中间按钮'(或鼠标滚轮,不管它叫什么!)点击链接。然后打开一个新选项卡,并将响应返回并呈现给该选项卡。

有什么方法可以防止这种情况发生?

回答

2

用javascript捕捉链接并覆盖默认链接行为。

这样的:

$('a.ajax').click(function(e){ 
    e.preventDefault(); 
    // do ajax stuff, and add an onfinish function that does 
    // something like document.location.href = this.attr('href'); 
}); 

你不必做document.location.href,正如我刚才注意到一个内容区域进行更新。只需使用e.preventDefault()捕获默认行为;

//编辑 preventDefault不会停止鼠标中键...您是否考虑过不使用标签?我知道它应该是可访问的,所以也许是一个包含链接的跨度,所以你可以在span上添加onclick事件,并用css隐藏链接?

+0

我实施了你的建议,添加一个跨度的链接。这不是理想的,但它的工作原理。 – DaveDev 2010-08-30 15:03:49

0

不幸的是,不会出于安全原因,Javascript无法访问该类控件,因为它可能会被滥用。

+1

对于期待他正常的浏览器行为的用户(即他所要求的),它也只是令人烦恼 - 如果他们使用辅助功能工具则更糟糕。 – Rushyo 2010-08-26 08:52:20

+0

@Rushyo对此有一些合理的用途,比如ajax链接在自己的窗口中打开时没有意义。您希望它看起来像一个链接,并使用链接标记来支持辅助功能,但是您希望点击该标签始终发出ajax请求,并且永远不会在其自己的标签中实际导航到该位置。 – AaronLS 2012-08-21 20:20:42

+0

@AaronLS您有两个目标:提供辅助功能支持并提供点击事件。将两者分开。链接不是假装成链接的链接不提供可访问性,这是欺骗符合性检查器的懒惰手段,它具有各种奇怪的语义,使其不适用于可访问的,语义清晰的网页。 – Rushyo 2012-08-22 13:02:35

相关问题