【问题标题】:How to loop properly如何正确循环
【发布时间】:2019-02-15 21:35:51
【问题描述】:

所以这是我需要做的总体情况

  1. 首先确认用户是否要添加课程,如果他们点击确定,则会提示他们进入课程,如果他们点击取消则完成程序。

  2. 当用户对课程给出答案时,他们需要为该特定课程给出评分。

  3. 完成这两个问题后,需要返回询问他们是否要再次添加课程

这就是我目前所拥有的

while (true) {
  var entering = confirm('Do you want to enter a Course?');
  if (entering = true) {
    break;
  }

}
var codeInput = '';
var gradeInput = '';
while (true) {
  codeInput = prompt('Enter Course Code');
  if (codeInput.length === 7) {
    break;
  }
  alert('invalid code');
}

gradeInput = prompt('Enter Grade for ' + codeInput + '');


document.writeln('<table border="1">');
document.writeln('<tr>');
document.writeln('<th>Course Code</th>');
document.writeln('<th>Grade</th>');
document.writeln('<tr>');
document.writeln('<th>' +
  codeInput +
  '</th>');
document.writeln('<th>' +
  gradeInput +
  '</th>');
document.writeln('</tr>');

所以我不知道如何将它循环回开始,以及当你点击取消时如何让程序停止,当它询问你是否要添加另一门课程时。我也不知道怎么做,所以如果用户要求输入另一个课程/等级,如何将它们变成一个单独的答案以添加到表格的下方。

我希望这是有道理的,如果有人可以提供帮助将非常感谢!

ps。这一切都必须使用 javascript 而非 HTML 来完成。

【问题讨论】:

  • 这里可以使用递归,而不是把em放到while循环中
  • 我还没有学习递归,所以我需要使用 while 循环或任何可以工作的循环

标签: javascript loops input output


【解决方案1】:

Working fiddle.

将您的代码包装在一个函数中,这样您就可以在每次进入 grad 时再次调用它。

我建议创建表格和标题,然后在用户回答提示时附加行:

var number_of_rows = 0;
var table = document.createElement('table');
table.border = '1';

ask();

function ask() {
  var codeInput = '';
  var gradeInput = '';

  var entering = confirm('Do you want to enter a Course?');

  if (!entering) {
    return;
  } else {
    while (true) {
      codeInput = prompt('Enter Course Code');

      if (codeInput.length === 7) {
        break;
      }

      alert('invalid code');
    }
  }

  gradeInput = prompt('Enter Grade for ' + codeInput + '');

  if (number_of_rows === 0) {
    var row = document.createElement('tr');
    var th_1 = document.createElement('th');
    var th_2 = document.createElement('th');
    var txt_1 = document.createTextNode("Course Code");
    var txt_2 = document.createTextNode("Grade");
    th_1.appendChild(txt_1);
    th_2.appendChild(txt_2);
    row.appendChild(th_1);
    row.appendChild(th_2);
    table.appendChild(row);

    number_of_rows++;
  }


  console.log(number_of_rows);

  table = insertRow(codeInput, gradeInput);

  document.body.appendChild(table);
  number_of_rows++;

  ask();
}

function insertRow(codeInput, gradeInput) {
  var row = document.createElement('tr');
  var td_1 = document.createElement('td');
  var td_2 = document.createElement('td');
  var txt_1 = document.createTextNode(codeInput);
  var txt_2 = document.createTextNode(gradeInput);

  td_1.appendChild(txt_1);
  td_2.appendChild(txt_2);
  row.appendChild(td_1);
  row.appendChild(td_2);

  table.appendChild(row);

  return table;
}

【讨论】:

  • 非常感谢您的帮助,我非常感谢,但我在问题中忘记提到的一件事是它必须在所有 javascript 中完成,而不是 html。
  • 由于某种原因它在这里运行但是当我把它放在我的文本编辑器中并在 Firefox 中打开它时它开始正常但是当我输入课程的成绩而不是询问我是否要输入另一个没有弹出,我什么也做不了,桌子也没有出现。我查看了 firefox 的控制台,它告诉我这个“document.body is null”是针对“document.body.appendChild(table);”这一行的。所以不确定这意味着什么。
  • 我想我修复了它,我在第一次 ask() 之前使用了“window.onload = function()”,它似乎有效。非常感谢,你帮了大忙!
  • 干得好,很高兴能帮上忙。快乐编码。
【解决方案2】:

据此https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt

如果用户点击取消按钮,该函数返回null

所以你只需要检查 value 是否为 null 就可以知道用户是否点击了取消

if (codeInput == null) break

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2017-10-05
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多