diff --git a/examples/inventory_corporate.html b/examples/inventory_corporate.html index ad6b8cb..118be88 100644 --- a/examples/inventory_corporate.html +++ b/examples/inventory_corporate.html @@ -841,16 +841,21 @@ input.invalid, select.invalid, textarea.invalid { // Clear form data (without removing from storage) function clearFormData() { - document.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { - field.value = ''; - field.classList.remove('invalid'); + const form = document.getElementById('inventory-form'); + if (!form) return; + + form.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { + if (field.id !== 'form-selector') { + field.value = ''; + field.classList.remove('invalid'); + } }); - document.querySelectorAll('input[type="checkbox"]').forEach(cb => { + form.querySelectorAll('input[type="checkbox"]').forEach(cb => { cb.checked = false; }); - document.querySelectorAll('.photo-preview').forEach(img => { + form.querySelectorAll('.photo-preview').forEach(img => { img.src = ''; img.style.display = 'none'; img.parentElement.classList.remove('has-photo'); @@ -915,30 +920,32 @@ input.invalid, select.invalid, textarea.invalid { // Get all form data function getFormData() { const data = {}; + const form = document.getElementById('inventory-form'); + if (!form) return data; - // Text, number, date, select, textarea - document.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { - if (field.id) { + // Text, number, date, select, textarea (only within the form) + form.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { + if (field.id && field.id !== 'form-selector') { data[field.id] = field.value; } }); // Checkboxes (boolean) - document.querySelectorAll('input[type="checkbox"].boolean-field').forEach(field => { + form.querySelectorAll('input[type="checkbox"].boolean-field').forEach(field => { if (field.id) { data[field.id] = field.checked; } }); // Multiselect - document.querySelectorAll('.multiselect-group').forEach(group => { + form.querySelectorAll('.multiselect-group').forEach(group => { const id = group.dataset.id; const checked = Array.from(group.querySelectorAll('input:checked')).map(cb => cb.value); data[id] = checked; }); // Photo - document.querySelectorAll('.photo-preview').forEach(img => { + form.querySelectorAll('.photo-preview').forEach(img => { const id = img.id; if (img.src && !img.src.includes('data:image/svg')) { data[id] = img.src; diff --git a/examples/inventory_minimal.html b/examples/inventory_minimal.html index 17a7644..cb86e84 100644 --- a/examples/inventory_minimal.html +++ b/examples/inventory_minimal.html @@ -872,16 +872,21 @@ select { // Clear form data (without removing from storage) function clearFormData() { - document.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { - field.value = ''; - field.classList.remove('invalid'); + const form = document.getElementById('inventory-form'); + if (!form) return; + + form.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { + if (field.id !== 'form-selector') { + field.value = ''; + field.classList.remove('invalid'); + } }); - document.querySelectorAll('input[type="checkbox"]').forEach(cb => { + form.querySelectorAll('input[type="checkbox"]').forEach(cb => { cb.checked = false; }); - document.querySelectorAll('.photo-preview').forEach(img => { + form.querySelectorAll('.photo-preview').forEach(img => { img.src = ''; img.style.display = 'none'; img.parentElement.classList.remove('has-photo'); @@ -946,30 +951,32 @@ select { // Get all form data function getFormData() { const data = {}; + const form = document.getElementById('inventory-form'); + if (!form) return data; - // Text, number, date, select, textarea - document.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { - if (field.id) { + // Text, number, date, select, textarea (only within the form) + form.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { + if (field.id && field.id !== 'form-selector') { data[field.id] = field.value; } }); // Checkboxes (boolean) - document.querySelectorAll('input[type="checkbox"].boolean-field').forEach(field => { + form.querySelectorAll('input[type="checkbox"].boolean-field').forEach(field => { if (field.id) { data[field.id] = field.checked; } }); // Multiselect - document.querySelectorAll('.multiselect-group').forEach(group => { + form.querySelectorAll('.multiselect-group').forEach(group => { const id = group.dataset.id; const checked = Array.from(group.querySelectorAll('input:checked')).map(cb => cb.value); data[id] = checked; }); // Photo - document.querySelectorAll('.photo-preview').forEach(img => { + form.querySelectorAll('.photo-preview').forEach(img => { const id = img.id; if (img.src && !img.src.includes('data:image/svg')) { data[id] = img.src; diff --git a/examples/inventory_modern.html b/examples/inventory_modern.html index 1cc968f..c8127ff 100644 --- a/examples/inventory_modern.html +++ b/examples/inventory_modern.html @@ -903,16 +903,21 @@ input.invalid, select.invalid, textarea.invalid { // Clear form data (without removing from storage) function clearFormData() { - document.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { - field.value = ''; - field.classList.remove('invalid'); + const form = document.getElementById('inventory-form'); + if (!form) return; + + form.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { + if (field.id !== 'form-selector') { + field.value = ''; + field.classList.remove('invalid'); + } }); - document.querySelectorAll('input[type="checkbox"]').forEach(cb => { + form.querySelectorAll('input[type="checkbox"]').forEach(cb => { cb.checked = false; }); - document.querySelectorAll('.photo-preview').forEach(img => { + form.querySelectorAll('.photo-preview').forEach(img => { img.src = ''; img.style.display = 'none'; img.parentElement.classList.remove('has-photo'); @@ -977,30 +982,32 @@ input.invalid, select.invalid, textarea.invalid { // Get all form data function getFormData() { const data = {}; + const form = document.getElementById('inventory-form'); + if (!form) return data; - // Text, number, date, select, textarea - document.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { - if (field.id) { + // Text, number, date, select, textarea (only within the form) + form.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { + if (field.id && field.id !== 'form-selector') { data[field.id] = field.value; } }); // Checkboxes (boolean) - document.querySelectorAll('input[type="checkbox"].boolean-field').forEach(field => { + form.querySelectorAll('input[type="checkbox"].boolean-field').forEach(field => { if (field.id) { data[field.id] = field.checked; } }); // Multiselect - document.querySelectorAll('.multiselect-group').forEach(group => { + form.querySelectorAll('.multiselect-group').forEach(group => { const id = group.dataset.id; const checked = Array.from(group.querySelectorAll('input:checked')).map(cb => cb.value); data[id] = checked; }); // Photo - document.querySelectorAll('.photo-preview').forEach(img => { + form.querySelectorAll('.photo-preview').forEach(img => { const id = img.id; if (img.src && !img.src.includes('data:image/svg')) { data[id] = img.src; diff --git a/src/templates.py b/src/templates.py index 0ac5f21..adb3877 100644 --- a/src/templates.py +++ b/src/templates.py @@ -1107,16 +1107,21 @@ JAVASCRIPT = """ // Clear form data (without removing from storage) function clearFormData() { - document.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { - field.value = ''; - field.classList.remove('invalid'); + const form = document.getElementById('inventory-form'); + if (!form) return; + + form.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { + if (field.id !== 'form-selector') { + field.value = ''; + field.classList.remove('invalid'); + } }); - document.querySelectorAll('input[type="checkbox"]').forEach(cb => { + form.querySelectorAll('input[type="checkbox"]').forEach(cb => { cb.checked = false; }); - document.querySelectorAll('.photo-preview').forEach(img => { + form.querySelectorAll('.photo-preview').forEach(img => { img.src = ''; img.style.display = 'none'; img.parentElement.classList.remove('has-photo'); @@ -1181,30 +1186,32 @@ JAVASCRIPT = """ // Get all form data function getFormData() { const data = {}; + const form = document.getElementById('inventory-form'); + if (!form) return data; - // Text, number, date, select, textarea - document.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { - if (field.id) { + // Text, number, date, select, textarea (only within the form) + form.querySelectorAll('input[type="text"], input[type="number"], input[type="date"], select, textarea').forEach(field => { + if (field.id && field.id !== 'form-selector') { data[field.id] = field.value; } }); // Checkboxes (boolean) - document.querySelectorAll('input[type="checkbox"].boolean-field').forEach(field => { + form.querySelectorAll('input[type="checkbox"].boolean-field').forEach(field => { if (field.id) { data[field.id] = field.checked; } }); // Multiselect - document.querySelectorAll('.multiselect-group').forEach(group => { + form.querySelectorAll('.multiselect-group').forEach(group => { const id = group.dataset.id; const checked = Array.from(group.querySelectorAll('input:checked')).map(cb => cb.value); data[id] = checked; }); // Photo - document.querySelectorAll('.photo-preview').forEach(img => { + form.querySelectorAll('.photo-preview').forEach(img => { const id = img.id; if (img.src && !img.src.includes('data:image/svg')) { data[id] = img.src;