无法将ajax:error处理程序附加到表单ID

时间:2018-07-30 22:28:58

标签: javascript ruby ajax coffeescript

我无法将ajax:error响应绑定到表单ID。有人可以指出正确的方向来解决这个问题吗?

这是代码。

<%= form_for @person,
              html: {
                id: '#person_form',
                class: 'js_inline_validate'
              },
              data: { validate_url: validate_field_people_path },
              remote: true,
              url: people_path do |f| %>

  <div class="form-group">
    <div class='form-group-label'>
      <%= f.label :first_name %>
    </div>
    <%= f.text_field :first_name,
                      :id => 'first_name',
                      class: 'js_new_person_frm_validate js_new_person_first_name' %>
    <div class="text-error small">
      <span>
        <%= @person.errors.full_messages_for(:first_name).first if @person.errors[:first_name].any? %>
      </span>
    </div>
  </div>

  <div class="form-group">
    <div class='form-group-label'>
      <%= f.label :last_name %>
    </div>
    <%= f.text_field :last_name,
                      :id => 'last_name',
                      class: 'js_new_person_frm_validate js_new_person_last_name' %>
    <div class="text-error small">
      <span>
                <%= @person.errors.full_messages_for(:last_name).first if @person.errors[:last_name].any? %>
            </span>
    </div>
  </div>

  <div class="form-group">
    <%= f.submit "Create", data: { disable_with: false } %>
  </div>
<% end %>

控制器

class PeopleController < ApplicationController

  ......

  def create
    @person = Person.new(create_params)

    if(@person.save)
      flash[:success] = "person created successfully"
      redirect_to root_path
    else
      respond_to do |format|
        format.html { render :action => 'new' }
        format.any(:js, :json) {
          render :json => { :error => @person.errors }, :status => 422
        }
      end
    end
  end

  .....

end

CoffeeScript

$ ->

  $("#person_form").on "ajax:error", (event, data, status, xhr) ->
    alert "ajax:error!"
    #do more stuff   

我无法解决的问题是,当我使用“文档”时,它的工作原理如下,但是我需要针对#person_form。当我用form_id替换文档时,我没有任何反应。我在这里想念一些简单的东西吗?

$ ->

      $(document).on "ajax:error", (event, data, status, xhr) ->
        alert "ajax:error!"
        #do more stuff 

谢谢!

1 个答案:

答案 0 :(得分:0)

对于所有可能遇到此问题的人,我将在这里留下一个简单的答案。希望对下一个人来说就是这么简单。我花了HOURS来查找问题。

事实证明该错误是由于一个非常简单的错误而发生的:

<%= form_for @person,
      html: {
        id: '#person_form',  <= ERROR IS HERE!!
        class: 'js_inline_validate'
      },
      data: { validate_url: validate_field_people_path },
      remote: true,
      url: people_path do |f| %>

#person_form应该是person_form(不包括井号)。从脚本切换到红宝石时,我没有捕获到代码中的一个非常简单的错误。

全局事件处理程序将捕获ajax:error并正确执行代码。标识符中的井号阻止了本地ajax事件的正确注册。