7

例如,有一些 JavaScript 代码有一个点击处理程序,它决定了用户应该被重定向到哪里。假设它只是一个重定向随机链接,当用户点击链接时计算出来。

以下是一些场景:

  • 如果用户左键单击链接,则用户的目的是将导航保持在同一选项卡中,这适用于window.location.

  • 如果用户中间点击了这个链接,对用户来说,网站似乎劫持了中间点击并简单地忽略了它,将用户重定向到同一选项卡而不是新选项卡。

  • 此外,正如有人刚刚评论(并删除了评论?),另一种情况是修改键也可以建议浏览器打开一个新选项卡,甚至是一个新窗口。

  • 另一个建议是能够通过上下文菜单在新选项卡或窗口中打开链接。这不太重要,但绝对是相同的可用性问题。

我在很多网站上都看到过这个问题,特别是对我来说,谷歌分析,几乎每次我中间点击时,都会发生这种效果。

一些 JavaScript 代码需要的一个很好的例子是:

处理一些数据,然后发送一个 XHR 请求,该请求需要在允许用户继续访问他们单击的链接之前完成。

你如何解决这个问题?例如,有没有办法检测用户是否期望链接出现在新标签中,如果是,是否可以加载新标签?也许我在想这个错误的方式?

4

3 回答 3

2

event.button可用于识别单击了哪个鼠标按钮。中间按钮返回 1。

该对象还event包含属性event.ctrlKey,它们是不言自明的。它们的值是是否按下了相应的键,否则。event.altKeyevent.shiftKeytruefalse


您希望实现的行为:http: //jsfiddle.net/pratik136/nCdhv/9/

html:

<a id="smart" href="http://www.bbc.co.uk/">Click</a>​

js:

$(function() {
    $('#smart').on('click', function(event) {
        if (event && event.button && event.button === 1) {
            event.preventDefault();
            window.open($('#smart').attr('href'), '_blank');
            return false;
        } else {
            return true;
        }
    });
});​

src:https
://developer.mozilla.org/En/DOM/Event.button 浏览器支持:http ://help.dottoro.com/ljaxplfi.php

于 2012-08-01T02:15:19.833 回答
1

这并不能完全回答问题,而是潜在的问题。我的一个伙伴意识到$.ajax有一个async: false选择。

$(function() {
    $('a').click(function(e) {
        $.ajax({url: '/', async: false}).done(function(d) { alert('hello ' + d) })
    })
})​

小提琴:http: //jsfiddle.net/gakman/7qdXE/

这将阻止href=""单击事件,直到 ajax 响应返回,并继续链接指向的任何选项卡/窗口。

他还说“这是有史以来最糟糕的事情”,这是绝对正确的。

于 2012-08-01T07:36:52.083 回答
0

要在浏览器中获得一致的行为,请在用户单击链接之前将链接的 href 属性设置为适当的值。然后由用户决定是否应该在同一个窗口、新窗口或选项卡中打开链接。

例如

<a href="http://www.apple.com" onclick="this.href='http://www.google.com'">Apple</a> 

在 IE 9 和 Firefox 中,左键单击打开 Google,ctrl + 左键单击将在新选项卡中打开 Apple,右键单击并选择“在新选项卡中打开链接”也是如此。解决此问题的唯一方法是在用户单击链接之前设置 href。

链接上的中间或右键单击可能不会调度单击事件。

如果链接已经被点击,并且使用返回按钮返回页面,则链接的href可能是原始的,也可能是脚本修改的。

底线是让链接表现得像链接。如果需要一些其他行为,请使用按钮或不同的 UI 对象。

于 2012-08-01T03:20:23.533 回答