我的JavaScript中有一个计时器,该计时器需要模拟时间流逝后单击链接以转到另一个页面。为此,我使用了jQuery的click()功能。我已经用过了$().trigger(),window.location也可以使用,并且我可以使这三个都按预期工作。
click()
$().trigger()
window.location
我观察到一些奇怪的行为,click()并且试图了解发生了什么以及为什么。
我在这个问题中描述的所有内容都使用了Firefox,但是我也对其他浏览器将如何使用它感兴趣。
如果我没有使用过$('a').bind('click',fn)或未$('a').click(fn)设置事件处理程序,则调用$('a').click()似乎根本不起作用。它不会为此事件调用浏览器的默认处理程序,因为浏览器不会加载新页面。
$('a').bind('click',fn)
$('a').click(fn)
$('a').click()
但是,如果我先设置一个事件处理程序,那么即使该事件处理程序不执行任何操作,它也可以按预期工作。
$('a').click(function(){return true;}).click();
这将加载新页面,就像我自己单击a一样。
所以我的问题是双重的:这是怪异的行为,因为我在某处做错了什么吗?click()如果我还没有创建自己的处理程序,为什么调用对默认行为不起作用?
编辑:
正如霍夫曼确定何时尝试复制我的结果一样,我上述的结果实际上并没有发生。我不确定是什么导致了昨天观察到的事件,但是今天我可以确定这不是我在问题中描述的。
因此,答案是您不能在浏览器中“伪造”单击,而jQuery所做的只是调用事件处理程序。您仍然可以使用window.location更改页面,对我来说效果很好。
有趣的是,这可能是jQuery的“功能请求”(即错误)。如果将jQuery事件绑定到元素,则jQueryclick事件仅触发元素上的click动作(在DOM上称为onClick事件)。您应该转到jQuery邮件列表并进行报告。这可能是通缉犯,但我不这么认为。
我进行了一些测试,您说的是错误的,即使您将函数绑定到’a’标签,它仍然无法将您带到href属性指定的网站。尝试以下代码:
<html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> <script> $(document).ready(function() { /* Try to dis-comment this: $('#a').click(function () { alert('jQuery.click()'); return true; }); */ }); function button_onClick() { $('#a').click(); } function a_onClick() { alert('a_onClick'); } </script> </head> <body> <input type="button" onclick="button_onClick()"> <br> <a id='a' href='http://www.google.com' onClick="a_onClick()"> aaa </a> </body> </html>
除非您直接单击链接(带有或不带有注释代码),否则它永远不会进入google.com。还要注意,即使将click事件绑定到链接,单击按钮也不会变成紫色。如果直接单击链接,它会变成紫色。
我进行了一些研究,似乎.click不能与’a’标记一起使用,因为浏览器不会支持javascript的“假点击”。我的意思是,您无法使用javascript“单击”元素。使用’a’标签,您可以触发其onClick事件,但是链接不会更改颜色(对于已访问的链接颜色,在大多数浏览器中默认为紫色)。因此,使$()。click事件与’a’标签一起使用没有意义,因为转到href属性的动作不是onClick事件的一部分,而是在浏览器中进行了硬编码。