Задать вопрос
@Loerdord

Как зациклить метод через setTimeout?

Есть код позволяющий совершать клики по кнопкам с определенным текстом, до конца страницы, но метод вызывается единожды и завершается, доходя до конца списка. Через setInterval нет точности. Как зациклить? Спасибо заранее.

var script = document.createElement('script');
script.type = "text/javascript";
script.src="https://code.jquery.com/jquery-3.5.1.min.js";
document.head.appendChild(script);

var t = 0;
$.each($("button"), function(i,v){
  if($(v).text() == "Кнопка ")
  {
     setTimeout(function(){
       $(v).click();  
  }, t);
  t+=5000
  }
});
  • Вопрос задан
  • 83 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
space2pacman
@space2pacman
Просто царь.
Codepen: https://codepen.io/space2pacman/pen/BaYbMeO?editor...
const script = document.createElement('script');

script.type = "text/javascript";
script.src="https://code.jquery.com/jquery-3.5.1.min.js";
document.head.appendChild(script);

let time = 0;
const buttons = $("button");

eachButtons();

function eachButtons() {
    $.each(buttons , (index, button) => {
        const text = $(button).text();

        if(text.includes("Кнопка ")) {
            clickButton(index, button, time);
            time+=1000;
        }
    });
}

function clickButton(index, button, t) {
    setTimeout(function(){
        $(button).click();
        console.log($(button).text())
        if (index === buttons.length - 1) {
            time = 1000;
            eachButtons();
        }
    }, t);
}
Ответ написан
Комментировать
@GrayHorse
Используй это:
function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

Чтобы писать простой и понятный код.

const btns = [...document.querySelectorAll("button")];
const filteredBtns = btns.filter(btn => btn.textContent.startsWith("Кнопка"));

for (const btn of filteredBtns) {
    btn.click();
    await sleep(5000);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы