我希望我的链接看起来像合法的网址,但行为方式不同,比如在点击事件发生时转到我定义的跟踪网址。 当我用鼠标左键单击链接时,我可以用.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);
});
目前,当您右键点击该链接时,新的网址将显示在浏览器角落,如何绕过该网址?
答案 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?
请查看
以下是我要做的事情。
将一个contextmenu事件附加到链接(当用户右键单击链接时触发偶数,并打开浏览器上下文菜单。)
添加逻辑以更改那里的href。这样当他们点击它时,它就会到达你想要的地方。
在您更改的链接上添加mousedown或hover事件,以确保在将鼠标悬停在其上时更正格式。不是每个人都需要这一步,但你做到了(这完全取决于你想要达到的目标,所以找出你的情况下哪个最好)
一旦格式得到纠正,您就可以取消绑定mousedown或任何其他事件。