1. /**
  2. * Form Wrapper with Sanity Checks for Routine Automation
  3. *
  4. * Wraps existing form logic and adds basic validation.
  5. *
  6. * @param {object} form - The form object (e.g., from document.getElementById).
  7. * @param {function} originalSubmit - The original submit handler.
  8. * @param {object} validationRules - An object defining validation rules for each field.
  9. * e.g., { fieldName: { type: 'required', pattern: /^\d+$/ } }
  10. */
  11. function wrapForm(form, originalSubmit, validationRules) {
  12. form.addEventListener('submit', function(event) {
  13. event.preventDefault(); // Prevent default form submission
  14. let isValid = true;
  15. // Validate each field based on the rules
  16. for (const fieldName in validationRules) {
  17. const rule = validationRules[fieldName];
  18. const field = form.querySelector(`[name="${fieldName}"]`);
  19. if (rule.type === 'required' && !field.value.trim()) {
  20. console.error(`Field "${fieldName}" is required.`);
  21. isValid = false;
  22. field.classList.add('error'); // Add an error class for styling
  23. }
  24. if (rule.type === 'pattern' && field.value.trim() && !rule.pattern.test(field.value.trim())) {
  25. console.error(`Field "${fieldName}" does not match the pattern.`);
  26. isValid = false;
  27. field.classList.add('error');
  28. }
  29. }
  30. if (!isValid) {
  31. // Display validation errors to the user (e.g., using a message)
  32. const errorMessagesElement = document.getElementById('error-messages');
  33. if (errorMessagesElement) {
  34. errorMessagesElement.innerHTML = ''; // Clear previous errors
  35. for (const fieldName in validationRules) {
  36. const rule = validationRules[fieldName];
  37. const field = form.querySelector(`[name="${fieldName}"]`);
  38. if (field.classList.contains('error')) {
  39. errorMessagesElement.innerHTML += `<p><strong>${fieldName}:</strong> ${rule.message || 'Invalid input'}</p>`;
  40. }
  41. }
  42. }
  43. return; // Stop submission if validation fails
  44. }
  45. // Call the original submit handler if validation passes
  46. originalSubmit();
  47. });
  48. }
  49. //Example Usage (assuming you have a form element with id "myForm")
  50. // wrapForm(document.getElementById('myForm'), myOriginalSubmitHandler, myValidationRules);
  51. /**
  52. * Example validation rules. Customize this to match your form.
  53. * @returns {object}
  54. */
  55. function createValidationRules() {
  56. return {
  57. name: { type: 'required', message: 'Name is required' },
  58. email: { type: 'required', pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/ , message: 'Invalid email format' },
  59. age: { type: 'required', pattern: /^\d+$/ , message: 'Age must be a number' }
  60. };
  61. }

Add your comment