一尘不染

如果尚未使用bind或click绑定事件处理程序,是否可以调用jquery click()跟随链接?

javascript

我的JavaScript中有一个计时器,该计时器需要模拟时间流逝后单击链接以转到另一个页面。为此,我使用了jQuery的click()功能。我已经用过了$().trigger()window.location也可以使用,并且我可以使这三个都按预期工作。

我观察到一些奇怪的行为,click()并且试图了解发生了什么以及为什么。

我在这个问题中描述的所有内容都使用了Firefox,但是我也对其他浏览器将如何使用它感兴趣。

如果我没有使用过$('a').bind('click',fn)或未$('a').click(fn)设置事件处理程序,则调用$('a').click()似乎根本不起作用。它不会为此事件调用浏览器的默认处理程序,因为浏览器不会加载新页面。

但是,如果我先设置一个事件处理程序,那么即使该事件处理程序不执行任何操作,它也可以按预期工作。

$('a').click(function(){return true;}).click();

这将加载新页面,就像我自己单击a一样。

所以我的问题是双重的:这是怪异的行为,因为我在某处做错了什么吗?click()如果我还没有创建自己的处理程序,为什么调用对默认行为不起作用?

编辑:

正如霍夫曼确定何时尝试复制我的结果一样,我上述的结果实际上并没有发生。我不确定是什么导致了昨天观察到的事件,但是今天我可以确定这不是我在问题中描述的。

因此,答案是您不能在浏览器中“伪造”单击,而jQuery所做的只是调用事件处理程序。您仍然可以使用window.location更改页面,对我来说效果很好。


阅读 400

收藏
2020-04-25

共1个答案

一尘不染

有趣的是,这可能是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事件的一部分,而是在浏览器中进行了硬编码。

2020-04-25