Приостановка скрипта для получения ввода с кнопки

#javascript #loops

#javascript #циклы

Вопрос:

Я не смог понять, как приостановить этот скрипт (дважды), чтобы получить результаты нажатий на кнопки. Он предназначен для отображения массива вопросов и ответов. Вот код:

 let counter = 0;
while (counter < 3) {
  counter  ;
  var x = document.&etElementById("divC");
  if (x.style.display === "none") {
    x.style.display = "block";
  } else {
    x.style.display = "none";
  }
document.&etElementById('divA').innerHTML = question[counter];
document.&etElementById('divB').innerHTML = '<button id="myBtn"&&t;Show Answer</button&&t;';
document.&etElementById('myBtn').addEventListener("click", function (){
document.&etElementById("divB").innerHTML = answer[counter];
  var x = document.&etElementById("divC");
  if (x.style.display === "none") {
    x.style.display = "block";
  } else {
    x.style.display = "none";
  }
})
document.&etElementById('divC').innerHTML = '<button id="myBtn2"&&t;Continue</button&&t;';
document.&etElementById('myBtn2').addEventListener("click", function (){
document.&etElementById("divC").innerHTML = "";
})
}
  

Все работает, пока я не помещу это в цикл while. Затем он просто переносит код через тире к последнему элементу массива. Спасибо за любую помощь, которую вы можете предложить старику.

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

1. Вы можете использовать функцию prompt для приостановки выполнения и получения пользовательского ввода, но это плохой UX imo. Вместо этого вы можете реструктурировать свой код и использовать переменную, которая содержит номер текущего шага, а затем изменить отображение на основе номера шага

Ответ №1:

Если я правильно понял вопрос, вы хотите собирать пользовательский ввод после показа каждого вопроса, верно?

Проблема

Код JavaScript нельзя «приостановить», да это и не нужно, потому что это заблокирует всю страницу, и вы не сможете нажать ни на одну кнопку. И поэтому цикл while не может помочь вам с этой функциональностью.

Фактический ответ

Вам нужно извлечь строки, которые преобразуют тексты divs в некоторую функцию, и запустить функцию при нажатии кнопки.

это должно выглядеть примерно так

 // store links to your elements in constants first
const divC = document.&etElementById("divC")
const divB = document.&etElementById("divB")
const divA = document.&etElementById("divA")
const myBtn = document.&etElementById("myBtn")

// declare some function that will to&&le answer visibility
const to&&leAnswerVisibility = function () {<your code &oes here&&t;}
// declare some function that will render next answer
const renderNextAnswer = function() {<your code &oes here&&t;}

// add event listener to show-answer-button to to&&le answer visibility
<show-button element&&t;.addEventListener("click", to&&leAnswerVisibility);
// add event listener to continue-button to render next answer
<continue-button element&&t;.addEventListener("click", renderNextAnswer);

  

Вот ответ, но не смотрите сюда сразу, попробуйте что-нибудь закодировать самостоятельно, а затем проверьте ссылку
https://codesandbox.io/s/pausin&-script-to-&et-button-input-fnzcw

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

1. Также попытайтесь назвать вещи несколько разумными (пример по предоставленной ссылке), я потратил довольно много времени, пытаясь понять, что делает divA/B/C и что делают обе кнопки. И прочитайте о let и const , var немного устарел freecodecamp.or&/news/var-let-and-const-whats-the-difference

2. Я понимаю, как это работает, и это очень полезно. Спасибо. Единственная проблема заключается в том, как завершить скрипт, когда в нем закончатся вопросы и ответы. Их будет 100.

3. Вы можете сохранить все вопросы в массиве. Просто проверьте, достигло ли ваше количество длины массива, выведите на экран какое-нибудь сообщение и скройте все кнопки

Ответ №2:

Я не смог выяснить, как приостановить этот скрипт

Я полагаю, вы ищете отладчик. вот видео, показывающее, как им пользоваться