javascript - 如何将多个元素传递给 setTimeOut 函数

标签 javascript

<分区>

我有以下代码:

for (z=0;z<7;z++) {
  x = Math.floor((Math.random() * 7));
  //I am pulling some class names from an array here
  var element = document.querySelector("." + map[x]);
  //element.click();            
  console.log('No timeout ', x);

  setTimeout(function() {
    console.log('timeout ', x);
    element.click();
  }, 200);
}

本质上,我期望点击各种随机元素,但是,在setTimeOut函数中添加click方法时,我发现它点击了同一个元素。但是当在主代码中执行时,它按预期工作,只是比我想要的快很多!

为了对此进行测试,我添加了一些日志。 No timeout 日志生成数字:1,2,3,4,5,6,7 而 timeout 日志生成数字:7,7,7,7,7 ,7,7(No timeout 日志中的最后一个数字...

这解释了为什么点击同一个元素,但我不是 100% 确定为什么会这样?

最佳答案

Javascript 解决超时 AFTER 循环已经运行。知道这一点,我们想将值 x 绑定(bind)到匿名函数并像这样传递它:

for (z = 0; z < 7; z++) {
  x = Math.floor((Math.random() * 26));
  //element.click();            
  console.log('No timeout ', x);

  setTimeout(function(x) {
    console.log('timeout ', x);
  }.bind(this, x), 200);
}

希望对你有帮助

关于javascript - 如何将多个元素传递给 setTimeOut 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58106711/

相关文章:

javascript - 想要在 Javascript 中触发 Dropdown SelectedIndexChanged 事件

javascript - DOJO:添加多个条件来查询dojox.grid.DataGrid

javascript - 显示本地用户文件并显示内容

javascript - HTML 视频调整大小以始终适合

javascript - 如何从 javascript 函数中显示 Bootstrap 模式?

javascript - Node.js 以错误的顺序循环打印

javascript - 基于浏览器的远程资源缓存

javascript - 当另一个脚本重新加载页面时,Jquery 脚本停止工作

javascript - 使用 CasperJS 登录后如何填写表单并获取 URL?

javascript - 如何比较 JavaScript 中的变量值?