在jQuery的链接上检测右键单击的“在新选项卡中打开”?

时间:2013-04-11 08:57:27

标签: jquery events mouse

我希望我的链接看起来像合法的网址,但行为方式不同,比如在点击事件发生时转到我定义的跟踪网址。 当我用鼠标左键单击链接时,我可以用.click()处理程序捕获它,并将href更改为其他内容。当我右键单击时,它不会被.click()捕获,但我可以使用.mousedown()和.mouseup(),这只是我问题的部分解决方案。

问题是,我想确保当某个用户右键单击该链接时,该链接仍然看起来合法,但当他选择在新标签中打开链接时,我会抓住该事件并更改href 。最后,当链接上发生实际点击事件时,href将更改回原始状态。他们实际去的网址,做了一些事情,并将它们重定向到真正的网址,但它发生得非常快。因此,此功能的目标是欺骗用户并跟踪他们的点击次数。 Facebook做到了,但他们如何处理正确的点击并“在新标签页中打开”?

好吧,如果没有一些代码我没想到...... 我现在有一些代码:

    link = $(selectorName);
    var original_link = link.attr("href");
    link.click(function(){
        link.attr("href", "/track_and_redirect");
    }).mousedown(function(event) {
        switch (event.which) {
            case 3:
                //alert('Right mouse button pressed');
                link.attr("href", "/track_and_redirect");
                break;
            default:
        }
    }).mouseleave(function(){
        link.attr("href", original_link);
    });

目前,当您右键点击该链接时,新的网址将显示在浏览器角落,如何绕过该网址?

3 个答案:

答案 0 :(得分:2)

您无法执行此操作,或者您可以为您的网址进行右键单击事件:)

How to distinguish between left and right mouse click with jQuery

答案 1 :(得分:1)

我使用了“contextmenu”,它帮助我改变鼠标右键点击的所有网址。

$('#help').on('click contextmenu', "a", function(event) {
  $(this).attr('href','my_new_url');
  $(this).attr('target', '_blank');
});

它还负责在新窗口中打开,复制链接等。

答案 2 :(得分:-1)

$(".links").contextmenu(function(event){
    // your logic to change the href here
    $(this).attr('href', '...');
    // don't forget to attach event to recover your old link back if you need it
    attachMouseDown($(this));
});

function attachMouseDown($el){
    $el.mousedown(function(event){
        // recover your links
        $el.attr('href', '...');
        $el.unbind('mousedown'); // this is so you don't run this event when you don't need to
    });
}

我刚刚在这篇文章中回答了类似的问题

how to capture the open link in new tab event in javascript?

请查看

以下是我要做的事情。

  1. 将一个contextmenu事件附加到链接(当用户右键单击链接时触发偶数,并打开浏览器上下文菜单。)

  2. 添加逻辑以更改那里的href。这样当他们点击它时,它就会到达你想要的地方。

  3. 在您更改的链接上添加mousedown或hover事件,以确保在将鼠标悬停在其上时更正格式。不是每个人都需要这一步,但你做到了(这完全取决于你想要达到的目标,所以找出你的情况下哪个最好)

  4. 一旦格式得到纠正,您就可以取消绑定mousedown或任何其他事件。