防止默认后重新创建自然链接单击事件

时间:2013-08-13 22:55:45

标签: javascript jquery javascript-events

$(document).on('click','a',function(e){
    e.preventDefault();

    var href = $(this).attr('href');

    sendAnalytics("clicked a link",function(){
        // on success callback, continue with link's redirect
        window.location = href;
        //   or location.assign(href);
    });

    setTimeout(function(){
        window.location = href;
    },5e3); // just incase callback never fires
});

如何在此示例中模拟默认链接点击行为?我注意到如果我在新选项卡中打开( control + click 中键单击),它仍会重定向当前选项卡。

我知道我可以捕获每次点击并检测它是否是中间鼠标与左鼠标,但有没有更简单的方法来完成此操作,包括 control + click 等内容?

<小时/> 到目前为止,我看到的唯一选择是将值存储在cookie中,然后在每个页面加载读取cookie,发送分析和删除cookie。

1 个答案:

答案 0 :(得分:0)

据我了解,您尝试拦截链接点击事件,发送一些分析数据,然后重新创建点击以继续导航。所以,要做到这一点:

function NewTab(url) {
    var newTab = window.open(url,"_blank");
    newTab.focus();
}

$("a").on("click", function(e) {    // more efficient

    var href = $(this).attr("href");

    if(e.ctrlKey) {   // ctrl to open in a new tab

        sendAnalytics("clicked a link", function() {
            NewTab(href);
        });

        setTimeout(function() {
            location.href = href;
        }, 5e3);
    }

    else {
        sendAnalytcis("clicked a link", function() {
            location.href = href;
        });

        setTimeout(function() {
            location.href = href;
        }
    }
});

首先,我创建了一个新的选项卡功能,如果用户已通过控制点击该链接,我可以使用该功能。然后我拦截了点击,如果按下了Control键,我发送分析然后在新标签中打开链接。否则,我发送分析然后重定向当前选项卡。如果回调没有触发,备份仍然存在。

作为脚注,重新创建“自然链接点击”的最简单方法是$(this).click();

希望这有帮助!
-CE