Purpose: Automatically submits forms when input values change, with configurable debouncing to prevent excessive submissions.

Features

  • Configurable debounce delay
  • Support for specific form targeting
  • Automatic cleanup of timeouts
  • Works with any form input events

Static Values

static values = {
  delay: { type: Number, default: 150 } // Debounce delay in milliseconds
}

Actions

  • submit: Trigger form submission (with debouncing)

Usage Examples

Basic Auto-Submit Form

<%= form_with model: @search, local: true, data: { controller: "fx-auto-submit" } do |f| %>
  <%= f.text_field :query,
      placeholder: "Search...",
      data: { action: "input->fx-auto-submit#submit" } %>
  <%= f.select :category, options_for_select([...]),
      data: { action: "change->fx-auto-submit#submit" } %>
<% end %>

Custom Delay Configuration

<%= form_with model: @filter, local: true,
    data: {
      controller: "fx-auto-submit",
      "fx-auto-submit-delay-value": 500
    } do |f| %>
  <%= f.text_field :name, data: { action: "input->fx-auto-submit#submit" } %>
  <%= f.range_field :price, data: { action: "input->fx-auto-submit#submit" } %>
<% end %>

External Form Targeting

<%= form_with id: "search-form", model: @search, local: true do |f| %>
  <%= f.text_field :query %>
<% end %>

<div data-controller="fx-auto-submit">
  <input type="text"
         data-action="input->fx-auto-submit#submit"
         data-fx-auto-submit-form-id-param="search-form">
</div>