我无法将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
谢谢!
答案 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事件的正确注册。