JSFiddle - React, Tailwind, and code Playground

by Mark

HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Form Input Warning</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <form id="myForm">
    <label for="textarea1">Textarea 1:</label>
    <textarea id="textarea1" name="textarea1">abcde</textarea>

    <label for="textarea2">Textarea 2:</label>
    <textarea id="textarea2" name="textarea2">12345</textarea>

    <label for="textarea3">Textarea 3:</label>
    <textarea id="textarea3" name="textarea3"></textarea>
  </form>

  <div id="warningMessage" class="hidden">Warning: Some fields that initially had data are now empty!</div>

  <script src="script.js"></script>
</body>
</html>

CSS

.hidden {
  display: none;
}

#warningMessage {
  color: red;
  font-weight: bold;
  margin-top: 20px;
}

JavaScript

document.addEventListener('DOMContentLoaded', (event) => {
  const form = document.getElementById('myForm');
  const textareas = form.querySelectorAll('textarea');
  const warningMessage = document.getElementById('warningMessage');

  // Capture the initial state of the form
  const initialData = Array.from(textareas).map(textarea => textarea.value);

  function checkForm() {
    let warning = false;
    textareas.forEach((textarea, index) => {
      if (initialData[index] && textarea.value === '') {
        warning = true;
      }
    });

    if (warning) {
      warningMessage.classList.remove('hidden');
    } else {
      warningMessage.classList.add('hidden');
    }
  }

  // Add event listeners to each textarea field to check form state on change
  textareas.forEach(textarea => {
    textarea.addEventListener('input', checkForm);
  });
});