data-autosave

Automatically save form drafts to localStorage as the user types. Restores on page reload with a toast notification. Clears on submit or reset.

Overview

The data-autosave attribute automatically persists form data to localStorage as the user types. If the page is accidentally closed or refreshed, the draft is restored on the next visit with a toast notification. The draft is cleared when the form is submitted or reset.

How It Works

Add data-autosave to any <form> element with a unique key as the value. The init script:

  1. Attaches delegated input and change event listeners on the form
  2. On every field change, debounces for 500ms then serializes all named fields to a JSON object
  3. Saves the object to localStorage with the key vb-autosave:{key} and a timestamp
  4. On page load, checks for a non-expired draft (24-hour expiry)
  5. If a draft exists, restores field values and fires input events so other enhancements update
  6. Shows a "Draft restored" toast notification via toast-msg if available
  7. Sets data-autosave-init to prevent double-binding

Password fields (type="password") and file inputs (type="file") are always skipped — sensitive data and file references are never stored.

Attributes

Attribute Value Description
data-autosave string (required) A unique storage key for this form. Used as part of the localStorage key: vb-autosave:{key}.
data-autosave-init boolean Set automatically to prevent double-binding. Do not set manually.

Storage Format

The draft is stored as a JSON object in localStorage. Each named field in the form becomes a key-value pair. A _ts timestamp is included for expiry checking.

Checkboxes and Radios

Checkbox and radio inputs are handled correctly during both save and restore:

  • Checkboxes — stored as "on" when checked, "" when unchecked. On restore, the checked property is set accordingly.
  • Radio buttons — only the checked radio's value is stored for the group name. On restore, the matching radio is checked.

With Other Enhancements

When a draft is restored, input events are fired on each restored field. This ensures other Vanilla Breeze enhancements that listen for input events — such as data-count, data-grow, and data-show-when — update correctly.

Toast Notification

When a draft is restored, a toast notification is displayed if toast-msg is available on the page. The toast uses the following configuration:

  • Message: "Draft restored"
  • Variant: info
  • Duration: 3000ms (auto-dismisses)

If toast-msg is not present, the draft is still restored silently without a notification.

Clear Behavior

The autosave draft is automatically cleared in two scenarios:

  • Form submit — the draft is removed from localStorage when the form is submitted
  • Form reset — the draft is removed when the form is reset via a reset button or form.reset()

Styling

The autosave attribute itself has no visual output. The only visible indicator is the toast notification on restore, which inherits styles from toast-msg.

All behavior is gated on data-autosave-init. Without JavaScript, the form works normally — data simply is not persisted to localStorage.

Accessibility

  • The "Draft restored" toast notification is announced by screen readers via toast-msg's accessible live region
  • Restored form state preserves the user's previous work, reducing frustration from accidental navigation
  • No visual layout changes occur during restore — fields are populated in place
  • Firing input events on restore ensures dependent enhancements (character counts, conditional fields) are in the correct state for assistive technology
  • Password and file fields are excluded from storage for security — users are not given a false sense of persistence for sensitive data
  • Without JavaScript, the form works as a standard HTML form — progressive enhancement