Stimulus Discourse

Form ajax:success called for remote input change

I’m using rails-ujs (not jquery_ujs) and Stimulus 1.1.1.

I have a remote form, with a remote select input. Both the form and and the select input use the same stimulus controller. They both also use ajax:success. However, I thought the sucess event would be relevant to the input it was bound to.

By that I mean, I thought the forms ajax:success would only fire on successful form submission.

Likewise, I thought the select inputs ajax:success would only fire on change of the select.

What I am actually experiencing is that both ajax:success methods are called on select change.

Some sample code

# my_view.html.erb
<%= simple_form_for(@my_model,
  remote: true,
  html: {
    data: {
      controller: "dog",
      dog_url: dogs_path,
      action: "ajax:success->dog#stuffForFormSuccess"
    }
  }) do |f| %>

  <%= f.input :dog_id,
    collection: dog_query,
    input_html: {
      data: {
        remote: true,
        url: get_by_id_dogs_path,
        type: 'json',
        action: "ajax:success->dog#stuffForSelectChange",
        target: "dog.dogSelect",
        controller: "select2-dog"
      }
    }
  %>

<% end %>

So in the above example, on select input change, both stuffForFormSuccess and stuffForSelectChange are called even though the form wasn’t submitted.

Is this expected behaviour?