2017-12-31 15 views
0

Ich habe eine kleine Geige, mit der ich experimentiert habe, und ich bemerkte, dass das Aufrufen einer Funktion innerhalb einer for-Schleife-Bedingung die Schleife beendete. Grundsätzlich zunächst wollte ich dies tun:Funktionsaufruf innerhalb einer for-Schleife bricht die Schleife

// add event listeners to tabs 
for (i=0;i<tabs.length;i++) { 
    tabs[i].addEventListener('click', function(event) { 
     var tab = event.target; 
     selectPage(tab.dataset.tab); 
     changeTab(tab); 
    }); 
    if (tabs[i].classList.contains('active')) { 
     selectPage(tabs[i].dataset.tab); 
    } 
} 

Aber, landete mit, dies zu tun, damit es funktioniert:

// add event listeners to tabs 
for (i=0;i<tabs.length;i++) { 
    tabs[i].addEventListener('click', function(event) { 
     var tab = event.target; 
     selectPage(tab.dataset.tab); 
     changeTab(tab); 
    }); 
} 
// find active class and set page 
for (i=0;i<tabs.length;i++) { 
    if (tabs[i].classList.contains('active')) { 
    selectPage(tabs[i].dataset.tab); 
    } 
} 

Hier ist ein Link auf den Fiddle

Vielen Dank für jeden Hilfe im Voraus, ich fühle, dass hier etwas Grundlegendes ist, das ich nicht bekomme. Danke

+0

Das ist unmöglich! – Ele

+0

Ok, könnten Sie das erklären ... – halfacreyum

+0

Sehen Sie sich meine Antwort an – Ele

Antwort

1

Lektion 0: Verwenden Sie ESLint oder ähnliche Tools, um Ihren Code auf triviale Fehler zu überprüfen, bevor Sie schlaflose Nächte hier auf SO und/oder in Debugging-Tools verbringen.

Lektion 1: Lokalisieren Sie Ihre Variablen.

Ihr Problem ist mit der Variable i, die global ist - daher wiederverwendet von Ihrem globalen Code und selectPage Funktion. Letzterer setzt seinen Wert auf tabs.length und beendet die Schleife vorzeitig.

Ersetzen Sie einfach durch var i = 0 bei jedem Ausdruck for Ausdruck.

+0

Vielen Dank für die gründliche Antwort, Erklärung und Vorschlag mit ESLint! – halfacreyum

1

Versuchen Sie, die x-Variable mit let zu deklarieren.

// add event listeners to tabs 
for (let i=0;i<tabs.length;i++) { 
    tabs[i].addEventListener('click', function(event) { 
    var tab = event.target; 
    selectPage(tab.dataset.tab); 
    changeTab(tab); 
    }); 
    if (tabs[i].classList.contains('active')) { 
    selectPage(tabs[i].dataset.tab); 
    } 
} 
+0

bis zum Vorschlagen lassen –

+0

Danke, für den Vorschlag. Ich änderte vars, um zu lassen. Ich lerne Vanilla JS auf, während ich React lerne, ich bin auf jQuery angewiesen. – halfacreyum

Verwandte Themen