JavaScript 范围 - 使用多项选择填充文本框

JavaScript Scope - populating text box with multiple selections

很抱歉提出了一个我确定很简单但我被卡住了的问题。我有一个项目要求用户 select 3 个注释,每个注释的值都应填充到文本框中,直到输入第 3 个注释。之后对数组进行比较,并向用户发送通知,让他们知道他们是否制作了有效的 selection。 我遇到的问题是让所有 3 个都填充,每次我单击一个按钮时它都会覆盖现有值。我试图将它们推送到一个数组,但它只包含当前值,我尝试了一个循环,但它填充了 selection 3x。我确定我忽略了一些简单的东西,但一直无法弄清楚它是什么。有人能指出我正确的方向吗? 谢谢!

<!doctype html>
<html>
<head>
  <title> Scope </title>
  <meta charset="utf-8">
  <style>
    html {
      height: 100%;
    }
    body {
      height: 100%;
      margin: 0px;
      font-family: Helvetica, sans-serif;
    }
    div#container {
       margin: auto;
       width: 300px;
    }
    form {
       margin-top: 20%;
    }
    form input[type="text"] {
       font-size: 120%;
       text-align: center;
    }
    form input[type="button"] {
       background-color: lightblue;
       font-size: 110%;
    }
</style>

<script>
   function addNote(event) {

      var validChords = {
         C: "CEG",
         F: "FAC",
         G: "GBD"
      };  

      var note = event.target.value;
      console.log(note);   

      var getNotes = [];
      var noteDisplay = document.getElementById("notesDisplay");
      var displayMessage = document.getElementById("message");

      getNotes.push(note);
      console.log(getNotes);

      noteDisplay.value = getNotes;
      noteDisplay.innterHTML = getNotes;
      displayMessage.innterHTML = "Please Enter Antoher Note!";

//Code below is different things I've been playing with trying to
// figure this out.  

//  var success = false;
//  if (notes.length > 0) {
//    if (note) {
//     for (var i =0; i < 3; i++) {
//       if(notes[i] == note) {
//         var found = true;
//         getNotes.push(note);
//     }
//    }     
//   }   
//  }   
 // if (getNotes.length < 3) {
  // }           

}              

window.onload = function() {
 var notes = ["C", "D", "E", "F", "G", "A", "B"];

 var cButton = document.getElementById("c");
 cButton.onclick = addNote;
 var dButton = document.getElementById("d");
 dButton.onclick = addNote;
 var eButton = document.getElementById("e");
 eButton.onclick = addNote;
 var fButton = document.getElementById("f");
 fButton.onclick = addNote;
 var gButton = document.getElementById("g");
 gButton.onclick = addNote;
 var aButton = document.getElementById("a");
 aButton.onclick = addNote;
 var bButton = document.getElementById("b");
 bButton.onclick = addNote;

// your code here    
} 
</script>
</head>
<body>
  <div id="container">
<form>
  <p id="message">Enter a major triad chord:</p>
  <p>
  <input id="notesDisplay" type="text" size="21">
 </p>
 <p>
   <input id="c" type="button" value="C">
   <input id="d" type="button" value="D">
   <input id="e" type="button" value="E">
   <input id="f" type="button" value="F">
   <input id="g" type="button" value="G">
   <input id="a" type="button" value="A">
   <input id="b" type="button" value="B">
</p>
</form>
</div>
</body>
</html>         

我终于想出了如何获取条目并与包含特定值的 object 和 return 注释或消息进行比较以重试。我快到了,但我的循环有问题(我认为)。当点击一个按钮时,一条消息应该显示 "please enter another note" 直到第 3 个 selection 被创建,当第一个按钮被点击时我得到 "you have made an invalid selection message" 而我没有明白为什么。我缺少的最后一块是应该在显示任何一条消息后清除表单。这让我抓狂,有人可以提示我还有什么问题吗?谢谢!

修改后的代码: 范围 html{ 高度:100%; } body{ 高度:100%; 边距:0px; font-family:黑体,sans-serif; } div#容器{ 保证金:自动; 宽度:300px; } 形式 { margin-top:20%; } 表单输入[type="text"] { font-size:120%; text-align:居中; } 表单输入[type="button"] { background-color:淡蓝色; font-size:110%; }

//Array to hold notes entered by user, counter to hold number of 
//buttons clicked
var getNotes = [];   
var counter = 0;

//addNote function, collects the notes entered by the user and displays 
//them in the text box. When the number of notes entered equals 3 a 
//compare is done to the validChords object. If the notes equal a valid 
//chord a messages is displayed to the user telling them which chord was 
//entered, if the chord is not correct a message is displayed telling 
//them to try again. After either the form should be cleared.

function addNote(event) {
  var validChords = {
     C: "CEG",
     F: "FAC",
     G: "GBD"
  };

  var note = event.target.value;
  var noteDisplay = document.getElementById("notesDisplay");
  var displayMessage = document.getElementById("message");

  if (counter <= 3)  {
    getNotes.push(note);
    var removeComma = "";

    for (i = getNotes.length-1; i >=0; i--) {
       removeComma = getNotes[i]+removeComma;
    }   

   noteDisplay.value = removeComma;
   noteDisplay.innerHTML = removeComma;
   displayMessage.innerHTML = "Please Enter Antoher Note!";
   counter = counter+1;
} 

 if (counter == 3) {
    for (var prop in validChords) {
      if (removeComma === validChords[prop]) {
      displayMessage.innerHTML = "You have entered a " + prop + "    
         Chord!";
      notesDisplay.innterHTML = " ";
      counter = 0;
      } 
    } 
 } else {
    displayMessage.innerHTML = "You have not entered a valid chord, 
       please try again!";
    notesDisplay.innterHTML = " ";
    counter = 0;
   }
  }    

    window.onload = function() {
    var notes = ["C", "D", "E", "F", "G", "A", "B"];

    var cButton = document.getElementById("c");
    cButton.onclick = addNote;
    var dButton = document.getElementById("d");
    dButton.onclick = addNote;
    var eButton = document.getElementById("e");
    eButton.onclick = addNote;
    var fButton = document.getElementById("f");
    fButton.onclick = addNote;
    var gButton = document.getElementById("g");
    gButton.onclick = addNote;
    var aButton = document.getElementById("a");
    aButton.onclick = addNote;
    var bButton = document.getElementById("b");
    bButton.onclick = addNote;

   } 
  </script>
</head>
<body>
<div id="container">
<form>
  <p id="message">Enter a major triad chord:</p>
  <p>
  <input id="notesDisplay" type="text" size="21">
  </p>
  <p>
   <input id="c" type="button" value="C">
   <input id="d" type="button" value="D">
   <input id="e" type="button" value="E">
   <input id="f" type="button" value="F">
   <input id="g" type="button" value="G">
   <input id="a" type="button" value="A">
   <input id="b" type="button" value="B">
  </p>
</form>
</div>
</body>
</html>         

我相信是因为你每次调用addNote函数时都将getNote初始化为一个空数组,请检查是否是这个问题。

谢谢