JSFiddle - React, Tailwind, and code Playground

by Craig Martin

HTML

<form id="myForm">
  <div>
    <label for="yes_no">Yes or No:</label>
    <input type="text" id="yes_no" name="yes_no">
    <span class="error" id="nameError"></span>
    <p class="example">Example: Yes</p>
  </div>
  <div>
    <label for="email">Email:</label>
    <input type="email" id="email" name="email">
    <span class="error" id="emailError"></span>
    <p class="example">Example: [email protected]</p>
  </div>
  <div>
    <label for="age">Age:</label>
    <input type="number" id="age" name="age">
    <span class="error" id="ageError"></span>
    <p class="example">Example: 25</p>
  </div>
  <div>
    <label for="percentage">Percentage:</label>
    <input type="number" id="percentage" name="percentage">
    <span class="error" id="percentageError"></span>
    <p class="example">Example: 75%</p>
  </div>
  <div>
    <label for="amount">Dollar Amount:</label>
    <input type="number" id="amount" name="amount">
    <span class="error" id="amountError"></span>
    <p class="example">Example: $100.50</p>
  </div>
  <button type="submit">Submit</button>
</form>

JavaScript

document.addEventListener('DOMContentLoaded', function() {
    const form = document.getElementById('myForm');

    function promptUserForRules(field, rule) {
      const result = prompt(`Expected answer for '${field.name}' (Yes/No/Number):`);
      
      if (result === 'Yes') {
        rule.method = validateYesNo;
        rule.message = 'Invalid value for Yes/No';
        rule.isYes= true;
      } else if (result === 'No') {
        rule.method = validateYesNo;
        rule.message = 'Invalid value for Yes/No';
        rule.skipToQuestion = prompt('Enter the ID of the question to skip to:');
      } else if (!isNaN(result)) {
        const inputType = prompt('Enter the input type (Raw/Percentage/Dollar):');
        if (inputType === 'Raw') {
          rule.method = validateNumber;
          rule.message = 'Invalid numeric value';
        } else if (inputType === 'Percentage') {
          rule.method = validateNumber;
          rule.message = 'Invalid percentage value';
          rule.isPercentage = true;
        } else if (inputType === 'Dollar') {
          rule.method = validateNumber;
          rule.message = 'Invalid dollar amount value';
          rule.isDollarAmount = true;
        }
        
        const shouldSumGroup = prompt('Should this input be part of a sum group? (Yes/No):');
        if (shouldSumGroup === 'Yes') {
          const groupLetter = prompt('Enter the group letter for this sum group:');
          field.setAttribute('data-group-letter', groupLetter);
        }
      }
    }

    // Define your validation functions here (validateYesNo, validateNumber, etc.)

    const rules = [
      { field: 'yes_no', method: null },
      { field: 'email', method: null },
      { field: 'age', method: null },
      { field: 'percentage', method: null },
      { field: 'amount', method: null }
      // Add more rules for other form fields
    ];

    for (const rule of rules) {
      const field = form.elements[rule.field];

     ...