JavaScript click () — не работает более одного раза

#javascript #wordpress

#javascript #wordpress

Вопрос:

Я хочу добавить автоматическую прокрутку к изображениям заголовков здесь: https://listify-demos.astoundify.com/classic/listing/the-drake-hotel /

Так document.querySelector('.slick-next').click(); что можно сделать щелчок, и я пытаюсь заставить его работать в цикле. Запускаем следующее в консоли JS:

 function myscroller() {
    document.querySelector('.slick-next').click();
}

for (var i = 1; i < 10;   i) {
    myscroller();
}
  

Я думал, что он должен нажать следующую кнопку 10 раз, но он нажимает ее только один раз. Чего мне не хватает?

Комментарии:

1. Что должен делать «щелчок» в вашем случае? У вас есть какой-нибудь пример кода?

2. Он нажимает правую кнопку в слайдере. ‘>’ вещь.

3. Посмотрите здесь: kenwheeler.github.io/slick у слика есть автозапуск.

4. Я предполагаю, что вам придется дождаться завершения анимации слайдера, прежде чем нажать на кнопку, чтобы сделать что-то еще.

5. Кроме того, примечание о несвязанной стороне: ваш цикл повторяется только 9 раз.

Ответ №1:

За то, что я понимаю в вашем сообщении. Если кнопка нажата, она будет повторяться 10 раз, верно? (correct me if i am wrong) .. Вот попробуйте это.

 function myscroller()
{
alert("Click Loop");
}
$("#btn").click(function(){
loopbtn();
});
function loopbtn(){
for (var i = 0; i < 10;   i) {
myscroller();
}
}  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<input type="button" id="btn" value="Click me">  

Комментарии:

1. На listify-demos.astoundify.com/classic/listing/the-drake-hotel когда я нажимаю кнопку «Далее» («>» в слайдере) — она прокручивает одно изображение. Я хочу выполнить несколько щелчков с помощью JS, чтобы это выглядело как автоматическая прокрутка.

Ответ №2:

Вообще говоря, страница перерисовывается только после выполнения потока. Вероятно, вы обнаружите, что ваша функция эмулирует 10 кликов, а затем перерисовывает страницу / выполняет анимацию в конце всего этого. Попробуйте использовать window.setTimeout() , чтобы сделать каждый щелчок отдельным процессом:

 for (var i = 1; i < 10;   i) {
    window.setTimeout(myscroller, i * 100); // each click 0.1 seconds apart
}
  

Я не тестировал это, но я думаю, что в качестве альтернативы jQuery справляется с этим довольно хорошо — если вы укажете ему эмулировать несколько событий подряд, он фактически ожидает завершения каждого из них, прежде чем перейти к следующему:

 jQuery('#my_element').click().click().click() // etc
  

Если вы попробуете этот подход, мне было бы интересно услышать, сработал ли он 🙂

Комментарии:

1. jQuery не выполняет то, что вы описываете.

2. Ну, я сказал, что это было непроверено. Понижающий голос кажется немного резким, вы должны найти, что первый вариант в моем ответе работает по мере необходимости … кстати, @bugnumber9 вы можете обнаружить, что ваш цикл выполняется только 9 раз, так как вы используете i вместо i того, чтобы увеличивать его до 2 перед первой итерацией.

3. На самом деле, добавление window.setTimeout сработало 🙂 Большое спасибо, Даг.