计算机里的约瑟芬 2023-10-05 22:55 采纳率: 75%
浏览 9

前端自动化问题小问,关于定时器以及触发器事件

在百度首页控制台中执行以下代码

var i = 0;
        setInterval(function () {
            $("#kw").val(`${i}`);
            $("#su").trigger("click");
            i++;
        }, 2000); 

为什么除了第一次能够在搜索框输入i并且点击搜索按钮打开搜素0的页面,之后只会在搜索框输入i但是并没有点击搜索按钮的事件发生

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-10-05 23:59
    关注

    引自强大而免费的微信小程序:皆我百晓生。


    这是因为setInterval函数会按照设定的时间间隔重复执行给定的函数,但是执行函数的时间需要考虑到代码的执行时间。在你的代码中,在每次执行函数时,首先设置了$("#kw").val(${i});,然后触发了$("#su").trigger("click");

    第一次执行时,$("#kw").val(${i});将搜索框中的值设置为0,然后$("#su").trigger("click");模拟点击了搜索按钮,打开了搜索0的页面。

    但是在接下来的执行过程中,由于每个函数的执行时间并不是精确的2000ms,而是大于2000ms的时间(因为执行过程中涉及到DOM操作,需要一些时间),所以当下一次函数执行时,搜索框中的值已经改变为了1,然后又触发了点击事件,但是此时搜索按钮已经被点击过一次了,再次触发点击事件只会导致重复的点击操作,而不会打开搜索1的页面。

    如果想要在每次函数执行时都触发点击事件,可以考虑使用setTimeout函数,这样每个函数执行完毕后等待指定时间再执行下一个函数。例如:

    var i = 0;
    function myFunction() {
      $("#kw").val(`${i}`);
      $("#su").trigger("click");
      i++;
    }
    setTimeout(function() {
      myFunction();
      setTimeout(arguments.callee, 2000);
    }, 2000);
    

    这样就能够在每次执行函数时,都触发搜索按钮的点击事件。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月5日

悬赏问题

  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22