当前位置: 首页 > 面试题库 >

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

方英耀
2023-03-14
问题内容

我的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更改页面,对我来说效果很好。


问题答案:

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



 类似资料:
  • 问题内容: 假设我有一个事件处理程序,它对服务器进行了两次AJAX调用: 我意识到,调用回调的顺序是不确定的,因为它取决于每个请求花费的时间等。 但是,这是我的问题:是否可以保证在调用两个回调函数之前到达事件处理程序的末尾?我已经读过页面的所有Javascript都在一个线程中执行,因此我认为这意味着在可以调用任何回调之前,一定要完成我的事件处理程序。 这样对吗?还是有可能第一个请求可能已经完成,

  • 本文向大家介绍如何使用JavaScript处理绑定事件?,包括了如何使用JavaScript处理绑定事件?的使用技巧和注意事项,需要的朋友参考一下 要使用JavaScript处理事件,请在任何元素上对鼠标单击事件使用click。 示例 您可以尝试运行以下代码,以了解如何使用JavaScript处理绑定事件:

  • 问题内容: 是否可以使用jQuery确定元素是否具有单击处理程序,更改处理程序或绑定到其的任何类型的事件处理程序? 此外,是否可以确定给定类型的事件有多少个单击处理程序(或任何类型的事件处理程序),以及事件处理程序中包含哪些功能? 问题答案: 您可以从数据缓存中获取此信息。 例如,将它们记录到控制台(firebug,即ie8): 或迭代它们:

  • 本文向大家介绍JQuery调用绑定click事件的3种写法,包括了JQuery调用绑定click事件的3种写法的使用技巧和注意事项,需要的朋友参考一下 第一种方式:  第二种方式: 第三种方式: 注意:第三种方式只适用于jquery 1.7以上的版本 源码如下:

  • 我有一个UITableView,在委托(视图控制器)中,我已经实现了该函数 然后,我测试编辑样式 作为删除的一部分,我请求用户确认,如果他们选择“是”,与该行相关的项目将被删除,如果他们选择“否”,我将重置编辑样式。 我似乎遇到的问题是没有调用任何完成处理程序。我在其他地方使用过这种格式,没有任何问题。 该警报将显示标题、消息以及按钮“取消”和“是”。如果我点击其中任何一个,什么都不会发生。警报被

  • 我试图使用一个简单的服务器-客户端应用程序(代码见下文)进入Netty。 我在与两个问题作斗争: null KJ 这就是服务器的创建方式: 其中一个处理程序类(FeedbackServerHandler执行完全相同的操作,但解析为整数):