在for循环中单击事件|我的价值永远是最后一个价值

时间:2016-07-10 15:00:57

标签: javascript phantomjs casperjs

我是CasperJS初学者。

我想遍历ul的所有li并点击每个li。单击li时,会弹出一个模态并保存模态数据。但是' i'的价值循环内部始终是结束值。
我在ul中有5个l 以下循环总是点击第5个li 5次,并在点击第5个li时保存模态数据5次。

casper.then(function() {
  a = lis.length;
  this.echo(a + ' lis found');
  for(var i = 1; i <= a; i++ ) {
    this.echo(i + ' now');
    this.click('.hello:nth-child('+ i +')' );
    casper.waitUntilVisible('.modal__content ', function() {
      console.log('Open Modal');
      links = links.concat(this.evaluate(getLinks));
    });
  }
});

我用google搜索并发现我们应该在闭包中包装事件监听器的赋值。但这并没有回应任何事情。

casper.then(function() {
  a = lis.length;
  this.echo(a + ' lis found');
  for(var i = 1; i <= a; i++ ) {
    (function(i){  // Added this line
      this.echo(i + ' now');
      this.click('.hello:nth-child('+ i +')' );
      casper.waitUntilVisible('.modal__content ', function() {
        console.log('Open Modal');
        links = links.concat(this.evaluate(getLinks));
      });
    })(i); // Added this line
  }
});

1 个答案:

答案 0 :(得分:1)

更改点击然后点击解决了问题:)

casper.then(function() {
  a = lis.length;
  this.echo(a + ' lis found');
  for(var i = 1; i <= a; i++ ) {
    this.echo(i + ' now');
    this.thenClick('.hello:nth-child('+ i +')' ); // Changed to thenClick from click
    casper.waitUntilVisible('.modal__content ', function() {
      console.log('Open Modal');
      links = links.concat(this.evaluate(getLinks));
    });
  }
});