Click事件不会在for循环的每次迭代中触发

时间:2019-05-26 06:35:26

标签: javascript

我想自动执行此page来生成考试结果。我想生成一个特定日期到另一个特定日期的考试结果。单击提交按钮后,页面将在新选项卡中生成另一个页面。

手动单击10次将生成10个标签。但是请参见以下代码:

for(let i=0;i<10;i++)
{
document.querySelector('#reg1').click();
console.log(`clicked ${i}th time`)
}

我想触发10次点击,它应该相应地生成10个标签。但是问题在于单击仅在第10次迭代中起作用,并且仅产生1个标签。帮我。 see

编辑: @杰西 查看我的实用程序的完整代码:

var dateFrom=new Date('2017-01')
var dateTo=new Date('2019-01')
for(var i=dateFrom;i<dateTo;i.setMonth(i.getMonth()+1))
{
    // console.log(`${i.getFullYear()}-${i.getMonth()}`);
    // var dd=`${i.getFullYear()}-${i.getMonth()}`;
    var dd=new Date(i).toISOString().substr(0,7);
    console.log(dd);
    document.querySelector("input#picker.form-control").value=dd;
    var type='Supplementary'
    document.querySelector("select#result_type.form-control.form-email.selectoption").value=type;
    document.querySelector('#reg1').click();

}

3 个答案:

答案 0 :(得分:1)

我刚刚发现浏览器的弹出窗口阻止程序阻止了后续选项卡的打开。

尝试关闭弹出窗口阻止程序。我可以在我离开时触发您要采取的行为。

当它单击时它可以工作,因为它是用户交互,因此阻止程序认为这是您正在积极尝试做的事情。如果您以编程方式反复触发它,它将被阻止。考虑到浏览器的弹出窗口阻止程序的主要功能之一是防止站点陷入无限弹出窗口地狱,因此这是有道理的。

答案 1 :(得分:1)

您必须以某种方式以异步方式执行子序列单击。我的工作是这样的:

let i=0;
(function doClick(){
  document.querySelector('#reg1').click();
  i++;
  if(i<10) setTimeout(() => doClick());
})()

使用async函数的另一种方法:

(async function doClick() {
  for(let i=0;i<10;i++) {
    document.querySelector('#reg1').click();
    await new Promise(setTimeout);
  }
})()

答案 2 :(得分:0)

这是因为您使用的是相同的ID。切换到使用类或更改ID名称,以使它们不相同。