| | |
| | | element: formElement, |
| | | id: formId, |
| | | options: { |
| | | autoSave: true, |
| | | autoSave: 'autosave' in formElement.dataset, |
| | | saveDelay: this.autoSaveDefaults.delay, |
| | | endpoint: formElement.dataset.save, |
| | | endpoint: formElement.dataset.save??'', |
| | | cache: true, |
| | | ...options |
| | | }, |
| | |
| | | |
| | | // Scan for existing selector fields |
| | | if (window.jvbSelector) { |
| | | window.jvbSelector.scanExistingFields(); |
| | | window.jvbSelector.scanExistingFields(form); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | handleChange(event) { |
| | | if (event.target.closest('[data-ignore]')) { |
| | | return; |
| | | } |
| | | if (this.subscribers.size > 0) { |
| | | const target = event.target; |
| | | const form = target.form || target.closest('form'); |
| | |
| | | } |
| | | |
| | | handleBlur(e) { |
| | | if (e.target.closest('[data-ignore]')) { |
| | | return; |
| | | } |
| | | const target = e.target; |
| | | const form = target.form || target.closest('form'); |
| | | |
| | |
| | | } |
| | | |
| | | handleInput(e) { |
| | | if (e.target.closest('[data-ignore]') || ! e.target.closest('form')) { |
| | | return; |
| | | } |
| | | const input = e.target.closest('input, textarea, select'); |
| | | if (!input) return; |
| | | |
| | |
| | | |
| | | document.addEventListener('DOMContentLoaded', () => { |
| | | window.jvbForm = FormController; |
| | | console.log('FormController in window'); |
| | | }); |