使用 .click() 和 setInterval 循环选项卡

Cycle tabs with .click() and setInterval

我现在已经尝试了很多不同的方法,但还没有取得任何进展或成功。我正在使用 foundation 5 框架,并试图让一组选项卡自动循环激活。这里有一个link。由于不仅仅是活动 class 在点击时发生变化,我认为模拟点击会比 addClass(active) 等更容易。这是我目前正在使用的。

HTML:

<dl class="tabs" datatab>
  <dd class="active">
    <a href="efs-tabpane-1-0>Promote</a>
  </dd>
  <dd class>
    <a href="efs-tabpane-1-1>Educate</a>
  </dd>
  <dd class>
    <a href="efs-tabpane-1-2>Analyze</a>
  </dd>
  <dd class>
    <a href="efs-tabpane-1-3>Report</a>
  </dd>
</dl>

JS:

$( "dd a" ).addClass("cycle");

setInterval(function(){
  $(this).next("a.cycle").click(), console.log("test");
}, 3000);

控制台正确记录了消息,但实际上没有发生任何其他事情。任何帮助表示赞赏。谢谢。

this 不是您所期望的。它将是 window.

您需要的是获取对该元素的引用的不同方法。

你可以这样做...

var clickNext = function() {
  var $active = $('.tabs .active');
  var $next = $active.next();
  if ( ! $next.length) {
      $next = $('.tabs dd:first-child');
  }
  $next.find('a').click();
  setTimeout(clickNext, 3000);
};

clickNext();

this 在你的例子中是 window。您也不需要添加 .cycle class。您可以使用同级 selector 来查找下一个元素。

setInterval(function(){
  $(".tabs .active + dd a").click();
}, 3000);

虽然如果你想让它循环,当你到达终点时你需要 select 第一个。你可以这样做:

setInterval(function(){
  if($(".tabs .active + dd a").length){
    $(".tabs .active + dd a").click();
  }else{
    $(".tabs dd:first a").click();
  }
}, 3000);