2015-07-22 116 views
1

我已經嘗試了這麼多不同的方式,現在還沒有任何形式的進展或成功。我正在使用Foundation 5框架,並試圖讓一組選項卡自動循環激活。這是一個link。由於不止是點擊活動類的變化,我認爲模擬點擊會比其他事情更容易,而不是addClass(活動)。這是我目前正在處理的內容。循環標籤與.click()和setInterval

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); 

控制檯正確,但字面上記錄消息沒有什麼事情發生。任何幫助讚賞。謝謝。

回答

1

this在你的例子是window。您也不需要添加.cycle類。您可以使用兄弟選擇器來查找下一個元素。

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

雖然如果你想循環,你需要選擇第一個當你達到結束。你可以這樣做:

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

不錯的選擇器:) – alex

+0

謝謝,工作!現在,是否有一種簡單的方法可以將其循環回去? –

1

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(); 
+0

我用'之前$( 「DD一」)的next()點擊()執行console.log( 「測試」);' –

+0

@ChrisPerry這是行不通的。因爲它會選擇所有這些「a」元素。 – alex

+0

','運算符也只是從左到右評估表達式。 – alex