简体   繁体   中英

How to select two input fields at once and check if they are filled?

So I am making a game and I need to check if these two HTML <input> fields have some data before I do an alert(); saying that they won. Unfortunately, I don't know how to implement this and I have been stuck at it for hours, please do help, attaching a screenshot for assistance.

In the image, I want to constantly monitor the 2 empty <input> fields and once there is data IN BOTH, then I want to throw up an alert();

Here's what I tried:

var firstLetterField = document.querySelectorAll("input")[0].value.length;
var secondLetterField = document.querySelectorAll("input")[1].value.length;

if (!firstLetterField && !secondLetterField) {
  console.log("Please ignore this message: NOT_FILLED...");
} else {
  alert("That's right! The word was " + spellingOfWord.join("").toUpperCase() + "! Thanks for playing!");
  window.location.href = "/";
}

“JS-刽子手”

How about just adding a common class to your user input and use querySelectorAll to perform your check?

eg

<html>
  <body id="game">
    <input data-expected="m" class="user-input" />
    <input data-expected="a" class="user-input" />

    <div id="keyboard">
      <button>d</button>
      <button>c</button>
      <button>b</button>
      <button>a</button>
      <button>d</button>
      <button>m</button>
      <button>e</button>
    </div>
  </body>

  <script>
    const inputs = document.querySelectorAll(".user-input");

    const keyboard = document
      .querySelector("#keyboard")
      .querySelectorAll("button");

    let inputPosition = 0;

    function nextInput() {
      inputPosition += 1;
      if (inputPosition === inputs.length) {
       alert("you won");
      } 
    }

    function handleClick(event) {
      const input = inputs.item(inputPosition);
      const submittedValue = event.target.innerHTML;

      if (input.dataset.expected === submittedValue) {
        input.value = submittedValue;
        setTimeout(nextInput);
      }
    }

    keyboard.forEach((button) => button.addEventListener("click", handleClick));
  </script>
</html>

You could register an event-listener and check if your condition is met:

var firstLetterField = document.querySelectorAll("input")[0];
var secondLetterField = document.querySelectorAll("input")[1];

// Function to call when both inputs contain values
function bothReady() {
    console.log("bothReady", firstLetterField.value, secondLetterField.value);
}

document.addEventListener("keyup", function (e) {
    // Wait for both fields to have values
    if (firstLetterField.value.length > 0 && secondLetterField.value.length > 0) {
        bothReady();
    }
});

Your code just works fine. There were just some mistakes that I noticed.

  • You tried to use the length to detect if it is empty. You could instead compare it with an empty string.
  • You reversed the boolean value using else. It looks that does the opposite of what you want.
  • In the code you showed you didn't actually defined spellingOfWord . So I did it for you.
  • The location "/" is not compatible in every server. So I would recomment replacing it by "index.html" .

Here is the code that I just created

function input_inputEvent() {
    var firstLetterField = document.querySelectorAll("input")[0].value;
    var secondLetterField = document.querySelectorAll("input")[1].value;
    var thirdLetterField = document.querySelectorAll("input")[2].value;
    if (firstLetterField.length != "" && secondLetterField != "") {
        alert(
           "That's right! The word was " + 
           [firstLetterField,secondLetterField,thirdLetterField].join("").toUpperCase() + 
           "! Thanks for playing!"
        );
        window.location.href = "index.html";
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM