javascript - 如何提交用户输入并删除输入后的问题?

标签 javascript html

我试图弄清楚如何捕获用户对多个问题的输入(仅用于本地目的,而不发送到服务器),验证每个答案是否正确,然后删​​除该问题并添加下一个问题需要回答的问题等等。我已经通过几次尝试接近了,但现在陷入困境。我使用的是普通 JS 和 html。

var firstQ = document.getElementById("first-q");
var secondQ = document.getElementById("second-q");
var thirdQ = document.getElementById("third-q");
var field1 = document.getElementById("field-1");
var field2 = document.getElementById("field-2");
var field3 = document.getElementById("field-3");

field1.addEventListener('submit', function(e) {
  e.preventDefault();

  function questionOne() {
    var answer1 = document.getElementById("first-q").value;
    if (answer1.toUpperCase() === "YES" || answer1.toUpperCase() === "YEAH") {
      alert("good answer");
      field1.classList.remove("active");
      field2.classList.add("active");
    } else {
      alert("wrong answer");
    }
  }
  return false;
});

field2.addEventListener("submit", function(e) {
  e.preventDefault();

  function questionTwo() {
    var answer2 = document.getElementById("second-q").value;
    if (answer2.toUpperCase() === "YES" || answer2.toUpperCase() === "YEAH") {
      alert("good answer");
      field2.classList.remove("active");
      field3.classList.add("active");
    } else {
      alert("wrong answer");
    }
  }
  return false;
});

field3.addEventListener("submit", function(e) {
  e.preventDefault();

  function questionThree() {
    var answer3 = document.getElementById("third-q").value;
    if (answer3.toUpperCase() === "YES" || answer3.toUpperCase() === "YEAH") {
      alert("good answer");
      field3.classList.remove("active");
    } else {
      alert("wrong answer");
    }
  }
  return false;
});
<form id="myForm" action="index.html" method="post">
  <fieldset class="active" id="field-1">
    <label>Is the sky blue?</label>
    <input type="text" id="first-q" autocomplete="off">
    <input type="submit" value="Submit Answer">
  </fieldset>
  <fieldset id="field-2">
    <label>Are you a human?</label>
    <input type="text" id="second-q" autocomplete="off">
    <input type="submit" value="Submit Answer">
  </fieldset>
  <fieldset id="field-3">
    <label>Is grass (usually) green?</label>
    <input type="text" id="third-q" autocomplete="off">
    <input type="submit" value="Submit Answer">
  </fieldset>
</form>

最佳答案

答案有点不同,但代码确实少了一些,而且您可以更轻松地添加一堆其他问题和答案,因为它使用类而不是 id 和数组作为答案。它应该只需要隐藏元素即可。如果您“删除”DOM 元素,可能会中断。

var sets = document.getElementsByClassName('question');

Array.from(sets).forEach(function(value,index) {

	value.querySelector("button").addEventListener('click', function(e){
		e.preventDefault();
  	var answer = this.previousElementSibling.value;
    checkAnswer(index, answer);
		return false;
	});
});

var answerlist = [["YES", "BLUE"], ["YES", "HUMAN"], ["YES", "GREEN"] ];

function checkAnswer(questionnumber, answer) {
	let answers = answerlist[questionnumber];
  let correct = false;
  
  answers.some(function(value,index) {
  	if (answer.toUpperCase() === value || answer.toUpperCase() === value) {
      alert("good answer");
      correct = true;
      return true;
    }
	});
  
	if (correct === false) alert("wrong answer");
  sets[questionnumber].style.display = "none";
  if (questionnumber < sets.length - 1) {
  sets[questionnumber].nextElementSibling.style.display = "block";
  }
  else {
  alert("done");
  }
}
.question {
  display:none;
}
fieldset.active {
  display:block;
}
<form id="myForm" action="index.html" method="post">
<fieldset class="active question">
  <label>Is the sky blue?</label>
  <input type="text" autocomplete="off">  
  <button type="submit" value="Submit Answer">submit answer</button>
</fieldset>
<fieldset class="question">
  <label>Are you a human?</label>
  <input type="text"  autocomplete="off"> 
  <button type="submit" value="Submit Answer">submit answer</button>
</fieldset>
<fieldset class="question">
  <label>Is grass (usually) green?</label>
  <input type="text" autocomplete="off">
  <button type="submit" value="Submit Answer">submit answer</button>
</fieldset>
</form>

关于javascript - 如何提交用户输入并删除输入后的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57032991/

相关文章:

c# - 删除 div 之间的间距,bootstrap

html - 如何使用固定导航栏控制 anchor 位置?

javascript - 为什么 Google Analytics 会在页面中动态注入(inject) javascript

javascript - Angular 自定义多选列表

html - CSS 滑出式菜单

javascript - jquery/Javascript中浏览图片时如何获取本 map 片路径

javascript - JQuery - 调用preventDefault()后提交表单

javascript - 在 Next.js 中从大写 URL 重定向到小写 URL

javascript - new Number(value)在js中如何工作?

javascript - 将 localStorage 值传递到输入字段时出现问题