Как перебрать массив вопросов и сохранить в массиве пользовательский ввод? - PullRequest
0 голосов
/ 12 января 2019



У меня возникла проблема при попытке перебрать массив вопросов правильно, когда я пытаюсь записать их в документ. Первый блок кода, который я включил ниже, по сути, является тем, чего я пытаюсь достичь, за исключением того, что я хотел бы сделать это без подсказок. Я создал массив с именем question[], который хранит 3 строки вопроса прямо сейчас. Цикл for с prompt(question[i]) принимает каждый вопрос в question[] и предлагает пользователю ответить на него. Затем он отправляет это значение в другой массив, который я создал и который называется character[].

Я пробовал пару разных методов, чтобы сделать это, используя метод .append, но безрезультатно, к сожалению, и я думаю, что я могу определить свои подводные камни в нескольких различных областях.
В последних блоках кода я пытался добавить вопросы из question[] на страницу, а затем попросить документ прослушать изменение входного значения или нажатие клавиши Enter (клавиша 13). Кроме того, пусть будет известно, что я обернул все это в следующую функцию:
$(document).ready(function(){...}

var question = [
    '<br> What is your name?',
    '<br> Are you man or woman?',
    '<br> What is your class?'
];   
var character = [];

//For Loop Using prompt()
for (i = 0; i < question.length; i++) {
     var input = prompt(question[i]);
     character.push(input);
     alert(character[i]);
}

//For Loop Attempting to Use HTML '<input>'
<input id="user-input" placeholder="Type Here"></input>

for (i = 0; i < question.length; i++) {
    $('#game-text').append(question[i]);
    $('#user-input').onchange = function() {
        var userInput = input.value;
        character.push(userInput);
    }
}

OR

for (i = 0; i < question.length; i++) {
    $('#game-text').append(question[i]);
    $(document).keypress(function(key){
    if(key.which === 13 && $('#user-input').is(':focus')) {
        var input = $('#user-input').val();
        character.push(input);
    }
})

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

Опять же, чтобы подвести итог, мой вопрос заключается в следующем:
Как я могу задать вопрос из массива на самой странице, заставить страницу ждать ответа, сохранить этот ответ в другом массиве, а затем делать это снова, пока я не пройду весь массив?
Большое вам спасибо за ваше время! Буду очень признателен за помощь!

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Поскольку вы хотите получить вопросник на самой странице (без подсказок), вы можете использовать события jQuery для управления флэш-вопросами на главной странице, а также для последовательной записи ответов в массиве. Вот что вы можете сделать:

var question = [
  'What is your name?',
  'Are you man or woman?',
  'What is your class?'
];
var i = 0;
var ans = [];

$(document).ready(function() {
  $("#ques").html(question[i]);
});

$("#answer").click(function() {
  ans.push($("#ans").val());
  $("#ans").val("");
  i++;
  $("#ques").html(question[i]);
  $("#answered").html(JSON.stringify(ans));
  if (i == question.length) {
    $("#ans").hide();
    $("#answer").hide();
    $("#ques").html("You've answered all the questions!");
  }
});
<!DOCTYPE html>


  
    
  

  
    

     
  

0 голосов
/ 12 января 2019

Вы можете использовать рекурсивный подход, оборачивая логику, чтобы задать вопрос внутри функции, а когда этот процесс завершится, затем снова вызвать эту функцию со следующим вопросом. Обратите внимание, что я удалил диалоговые окна с предупреждениями и заменил их на console.log() в конце всего процесса, чтобы немного очистить логику.

var question = [
    '<br> What is your name?',
    '<br> Are you man or woman?',
    '<br> What is your class?'
];
var character = [];

const askQuestion = (idx) =>
{
    if (idx >= question.length)
    {
        console.log(character);
        return;
    }

    character.push(prompt(question[idx]));
    askQuestion(idx + 1);
}

askQuestion(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...