Хорошо, это кажется довольно простым, но я застрял.
Я устанавливаю переменную вне цикла, затем увеличиваю, и как только счетчик достигает порогового значения, мне нужно сбросить его до 0.
var cnt = 0;
$("ul").each(function(cnt) {
var ths = $(this),
tul = ths.attr("id");
cnt = cnt++;
if (cnt == 20) {
cnt = 0;
}
...
});
По какой-то причине он продолжает увеличиваться до конца просмотра. Что мне не хватает?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если не может быть сброшен на 0, потому что cnt является аргументом показатель функции .each(function(cnt) { и всегда будет индексом итерации. Вы пытаетесь сбросить что-то на 0, что в следующем цикле снова будет целым числом индекса.
В зависимости от того, что вы хотите (пока не ясно из вашего вопроса), вы можете просто не использовать атрибут индекса:
let cnt = 0;
$("ul").each(function() {
cnt += 1;
if (cnt === 20) {
cnt = 0;
}
// ...
});
Используйте оператор напоминания %, чтобы вернуться к 0, как только idx станет 20.
В этом случае вам не нужна внешняя переменная, но вместо этого вы можете использовать атрибут итерирующего индекса:
$("ul").each(function(idx) {
const cnt = idx % 20; // Reset to 0 once idx is 20
// ...
});
Первым аргументом функции является индекс массива. Ознакомьтесь с документацией jQuery. https://api.jquery.com/each/
Вам не нужно передавать параметр в функцию. См. код ниже.
var cnt = 0;
$("ul").each(function() {
cnt++;
if (cnt == 20) {
cnt = 0;
}
});
Какова цель
tul?.. Почему вы делаетеcnt = cnt++;вместоcnt = cnt+1;или простоcnt += 1;или простоcnt++;?