Динамически отображать массив JavaScript в HTML

#javascript #arrays #html

#javascript #массивы #HTML

Вопрос:

Я новичок в этом. У меня есть задание на веб-дизайн (с использованием Javascript и HTML5), которое требует, чтобы я использовал цикл do while, чтобы предложить пользователю ввести месяц и количество шагов, предпринятых за этот месяц. Это должно динамически заполнять список в моем HTML, поэтому на сайте должны отображаться два столбца с вводимыми значениями. Например:

Введенные шаги:

Месяц: шаги:

Май 15000
Июнь 20000
Июль 25000
… и так далее…

Всего шагов: 60000

Мой код не работает.
РЕДАКТИРОВАТЬ: текущая проблема заключается в том, что он, похоже, застрял в бесконечном цикле. ‘done’ не останавливает окна подсказок, и на сайте ничего не заполняется.
Может кто-нибудь пролить свет, пожалуйста? Заранее благодарю!

Вот мой код:

 <script type = "text/javascript">
			function getSteps()
			{
				var months = new Array(); 
				var steps = new Array();
				var m = 0;
				var s = 0;
				var stepTotal = 0;
								
				do{
					months[m] = prompt("Enter a month or enter 'done' when finished:");
					document.getElementById("mlog").innerHTML = months[m]   "<br>";
					steps[s] = prompt("How many steps did you take?");
					document.getElementById("slog").innerHTML = steps[s]   "<br>";
					steps[s] = parseInt(steps[s]);
					stepTotal  = steps[s];
					m  ;
					s  ;
				}while(months[m] != "done");
				document.getElementById("totalS").innerHTML = "Total Steps: "   stepTotal;
			}			
		</script>  
 <!DOCTYPE html>
<html lang="en">
	<head>
		<title>Monthly Steps Page</title>
		<meta charset="utf-8">
		
	</head>
	<body>
		<header>
			<h1>Count your steps!</h1>
		</header>
		<section>
			<h2>Click on the buttons below to enter the number of steps taken every month.</h2>
			<button onclick="getSteps();">Steps Log</button><br><br>
				<p>Steps Entered:</p>
				<p>Month<br>
				<span id="mlog">amp;nbsp;</span></p>
				<p>Steps<br>
				<span id="slog">amp;nbsp;</span></p>
				<p>Total Steps: <span id="totalS">amp;nbsp;</span></p>
		</section>
	</body>	
</html>  

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

1. «Мой код не работает». Не могли бы вы уточнить, в чем проблема, пожалуйста? например, приведите пример того, что вы ожидаете от него, по сравнению с тем, что он на самом деле делает прямо сейчас. В противном случае людям приходится внимательно просматривать все это или догадываться.

2. @ADyson Мои извинения! Я обновил его! Спасибо!

3. это document.getElementById, а не document.getElementById. Не используйте заглавную букву D.

4. @peerbolte Спасибо! Я это исправил. Теперь он, похоже, застрял в бесконечном цикле. ‘done’ не останавливает окна подсказок, и на сайте ничего не заполняется.

Ответ №1:

Вы тестируете months[m] после того, как выполняете m , так что должно быть months[m-1] . Лучше переместить это за пределы цикла.

 function getSteps() {
  var months = new Array();
  var steps = new Array();
  var m = 0;
  var s = 0;
  var stepTotal = 0;
  var month = prompt("Enter a month or enter 'done' when finished:");
  while (month amp;amp; month != 'done') //pressed [cancel], empty or "done"
  {
    months.push(month); //months[m] = month;
    //document.getElementById("mlog").innerHTML  = months[m]   "<br>";
    var step /*steps[s]*/ = parseInt(prompt("How many steps did you take?")) || 0; //0 replaces NaN
    //document.getElementById("slog").innerHTML  = steps[s]   "<br>";
    document.getElementById("tablelog").innerHTML  = "<tr><td>"   month   "</td><td>"   step   "</td></tr>";
    steps.push(step); //steps[s] = parseInt(steps[s]);
    stepTotal  = step;
    m  ;
    s  ;
    month = prompt("Enter a month or enter 'done' when finished:");
  }
  document.getElementById("totalS").innerHTML = stepTotal;
}  
 table,
td,
tr,
th {
  border: 1px solid black;
  border-collapse: collapse;
}  
 <!DOCTYPE html>
<html lang="en">

<head>
  <title>Monthly Steps Page</title>
  <meta charset="utf-8">

</head>

<body>
  <header>
    <h1>Count your steps!</h1>
  </header>
  <section>
    <h2>Click on the buttons below to enter the number of steps taken every month.</h2>
    <button onclick="getSteps();">Steps Log</button>
    <br>
    <br>
    <table>
      <tbody id="tablelog">
        <tr>
          <th colspan=2>Steps Entered:</th>
        </tr>
        <tr>
          <th>Month</th>
          <th>Steps</th>
        </tr>
      </tbody>
    </table>
    <p>Total Steps: <span id="totalS">amp;nbsp;</span>
    </p>
  </section>
</body>

</html>  

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

1. также используйте = вместо = для добавления текста в innerHTML

Ответ №2:

Если вы проверите months[m] с помощью консоли.регистрируйте, что он не определен, поэтому вам следует проверить months[m-1] , следует ли вам использовать do, пока ваш скрипт будет выглядеть следующим образом:

 <script type = "text/javascript">
        function getSteps()
        {
            var months = new Array();
            var steps = new Array();
            var m = 0;
            var s = 0;
            var stepTotal = 0;

            do{
                months[m] = prompt("Enter a month or enter 'done' when finished:");
                document.getElementById("mlog").innerHTML = months[m]   "<br>";
                steps[s] = prompt("How many steps did you take?");
                document.getElementById("slog").innerHTML = steps[s]   "<br>";
                steps[s] = parseInt(steps[s]);
                stepTotal  = steps[s];
                m  ;
                s  ;
                console.log(m);
                console.log(s);
                console.log(months[m]);
            }while (months[m-1] != "done");
            document.getElementById("totalS").innerHTML = "Total Steps: "   stepTotal;
        }
    </script>
  

И в конце концов он все равно будет запрашивать после того, как вы напишете «готово». Это будет лучше только с помощью while() . Поэтому, если нет необходимости использовать do while — используйте только while .