Rails 4:Ajax 重新加载后提交按钮没有响应
Rails 4: Submit button not responsive after its been reloaded by Ajax
我的用户展示页面有一部分
<div id = "AboutMeJS">
<%= render "about_me" %>
</div>
_about_me.html.erb部分是:
<% unless @user.about.blank? %>
<div class = "HeaderRow">
<span class="glyphicon glyphicon-user AboutMe" aria-hidden="true"> </span>
<div class = "Header">About <%= about_me_variable %>
<% if current_user == @user %>
<a class = "ProfileEdit" id = "AboutMeEdit">Edit</a>
<% end %></div>
<div class = "AboutMe"><%= @user.about.html_safe %></div>
<%= render 'about_me_change' %>
</div>
<%end %>
这还包含部分内容:_about_me_change.html.erb
(不确定这是否是个好主意 - 我是 rails 的新手):
<div id = "AboutMeForm">
<div class = "UserEditsJS">
<%= simple_form_for(@user, html: { multipart: true }, remote: true) do |f| %>
<%= f.text_area :about, class: 'form-control', :id => "edit" %>
</div>
<%= f.submit "Update", class: "btn btn-success AboutMeUpdateButton", id: "ThirdUpdate" %>
<% end %>
</div>
最后是我的:about_me.js.erb
$('#AboutMeJS').html("<%= escape_javascript(render('about_me')) %>")
user_controller 更新操作允许通过 ajax
进行更新
def update
respond_to do |format|
if @user.save
flash.now[:success] = "Profile updated"
format.html { redirect_to @user }
format.js { render 'about_me'}
else
flash.now[:danger] = "There was a problem with your update"
format.html { redirect_to user_path(@user) }
format.js
end
end
end
end
一次就可以了。但是,如果我随后尝试另一个更新 - 提交按钮,在第一次更新后重新加载时没有响应。我在 PHP 的设置中看到了与此类似的其他问题,当提交按钮由 jQuery 处理时(使用 "on" 而不是 "click"),但在 Rails设置。
为什么按钮没有第二次提交?
可能原因不对html。 about_me_change
部分可能如下所示:
<div id="AboutMeForm">
<div class="UserEditsJS">
<%= simple_form_for(@user, remote: true) do |f| %>
<%= f.field :about, as: :text %>
<%= f.button :submit %>
<% end %>
</div>
</div>
请注意,simple_form_for
方法接收一个块,该块将被插入到 <form>
标记中。所以你必须在同一个嵌套级别上打开和关闭<div>
。
第一次更新后,javascript替换部分表格,其中包括领导者<form>
,不包括</form>
。
P.S。 multipart: true
将在需要时自动添加。
P.P.S。当您使用 simple_form gem 时,您可以使用 f.field
代替 f.text_field
方法,并使用 f.button :submit
代替 f.submit
。详情见documentation
我的用户展示页面有一部分
<div id = "AboutMeJS">
<%= render "about_me" %>
</div>
_about_me.html.erb部分是:
<% unless @user.about.blank? %>
<div class = "HeaderRow">
<span class="glyphicon glyphicon-user AboutMe" aria-hidden="true"> </span>
<div class = "Header">About <%= about_me_variable %>
<% if current_user == @user %>
<a class = "ProfileEdit" id = "AboutMeEdit">Edit</a>
<% end %></div>
<div class = "AboutMe"><%= @user.about.html_safe %></div>
<%= render 'about_me_change' %>
</div>
<%end %>
这还包含部分内容:_about_me_change.html.erb (不确定这是否是个好主意 - 我是 rails 的新手):
<div id = "AboutMeForm">
<div class = "UserEditsJS">
<%= simple_form_for(@user, html: { multipart: true }, remote: true) do |f| %>
<%= f.text_area :about, class: 'form-control', :id => "edit" %>
</div>
<%= f.submit "Update", class: "btn btn-success AboutMeUpdateButton", id: "ThirdUpdate" %>
<% end %>
</div>
最后是我的:about_me.js.erb
$('#AboutMeJS').html("<%= escape_javascript(render('about_me')) %>")
user_controller 更新操作允许通过 ajax
进行更新 def update
respond_to do |format|
if @user.save
flash.now[:success] = "Profile updated"
format.html { redirect_to @user }
format.js { render 'about_me'}
else
flash.now[:danger] = "There was a problem with your update"
format.html { redirect_to user_path(@user) }
format.js
end
end
end
end
一次就可以了。但是,如果我随后尝试另一个更新 - 提交按钮,在第一次更新后重新加载时没有响应。我在 PHP 的设置中看到了与此类似的其他问题,当提交按钮由 jQuery 处理时(使用 "on" 而不是 "click"),但在 Rails设置。
为什么按钮没有第二次提交?
可能原因不对html。 about_me_change
部分可能如下所示:
<div id="AboutMeForm">
<div class="UserEditsJS">
<%= simple_form_for(@user, remote: true) do |f| %>
<%= f.field :about, as: :text %>
<%= f.button :submit %>
<% end %>
</div>
</div>
请注意,simple_form_for
方法接收一个块,该块将被插入到 <form>
标记中。所以你必须在同一个嵌套级别上打开和关闭<div>
。
第一次更新后,javascript替换部分表格,其中包括领导者<form>
,不包括</form>
。
P.S。 multipart: true
将在需要时自动添加。
P.P.S。当您使用 simple_form gem 时,您可以使用 f.field
代替 f.text_field
方法,并使用 f.button :submit
代替 f.submit
。详情见documentation