2010-04-18 55 views
2

我想,当按下一个键被点击一个链接的用户点击,我做了这个jQuery的:模拟链路

$('form#form1').bind("keypress", function(e){ 
     if(e.keycode == 13 || e.keyChar == 13 || e.which == 13){ 
     $('.LoginBoxButton a').click(); 
     } 
    }); 

它不工作,我已经仔细阅读以下说明为什么:

重要的是要记住, 点击()不会触发链路上的默认 行为,即使没有其他 是防止这一点很重要。所以你不能 使用click()本身来模拟 用户点击一个链接,并被 带到另一个url。

但是,您如何模拟用户点击链接并转到其他网址?

+1

。点击()** **不触发链接的默认行为(真的没有什么别的它*不能触发连接到链接元素的任何事件处理程序 – Gareth 2010-04-18 22:20:20

+0

你应该做到这一点,$('。LoginBoxButton a')。trigger('click'); – 2010-04-19 03:22:28

回答

4

你可以走了大约是这样的:

$('form#form1').bind("keypress", function(e){ 
    if(e.keycode == 13 || e.keyChar == 13 || e.which == 13){ 
     document.location.href = $('.LoginBoxButton a').attr('href'); 
    } 
}); 
+0

工作正常!谢谢! :) – timkl 2010-04-18 22:12:00

+0

@timkl:不客气。 – Sarfraz 2010-04-18 22:13:27

2

但你如何模拟用户点击一个链接,被带到另一个网址?

这是两个不同的东西:

首先,模拟用户点击,是一个相当低的水平的任务。我会呛到一个无限制的浏览器。

第二,将用户带到另一个网址,就像分配您想要的网址document.location.href一样简单。

所以,与其

$('.LoginBoxButton a').click(); 

使用

document.location.href = $('.LoginBoxButton a').attr('href'); 

希望这有助于。

+1

要模拟点击,请执行此操作,$('。LoginBoxButton a')。trigger('click'); – 2010-04-19 03:23:51

1

所有jQuery's Event.which首先正常化event.keyCodeevent.charCode - 所以你不必检查keyCode/charCode
其次决定是否要模拟用户点击元素或只是重定向到其他位置,因为一个和第二个之间存在巨大差异。而最后一个只是重定向第一个,首先执行所有连接的mousedown/mouseup/click(按给定顺序)事件。另外,如果click事件将返回false重定向应该被阻止。

所以对于第一种情况的代码已经给出,但在这里是真正的模拟代码:

<a href="test.html">LsINK</a> 
<span>ROBOT</span> 

$("a").mousedown(function() { alert("mousedown"); }) 
     .mouseup(function() { alert("mouseup"); }) 
     .click(function() { alert("click"); return false; }); 

$("span").click(function() { 
    if (false !== $("a").mousedown().mouseup().triggerHandler("click")) { 
     alert("Redirect to: " + $("a").attr("href")); 
     //window.location.href = $("a").attr("href"); 
    } 
});