#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-difference2. Я понимаю, как это работает, и это очень полезно. Спасибо. Единственная проблема заключается в том, как завершить скрипт, когда в нем закончатся вопросы и ответы. Их будет 100.
3. Вы можете сохранить все вопросы в массиве. Просто проверьте, достигло ли ваше количество длины массива, выведите на экран какое-нибудь сообщение и скройте все кнопки
Ответ №2:
Я не смог выяснить, как приостановить этот скрипт
Я полагаю, вы ищете отладчик. вот видео, показывающее, как им пользоваться