我正在开发一个带有ruby on rails的小型待办事项列表应用程序,当我选择一个复选框时,我想通过ajax提交表单。我一直在关注this guide尝试这样做。
更改复选框虽然没有提交表单,所以我在SO上搜索了类似的问题,并对我的代码进行了一些更新。
它仍然不会提交。我感觉它没有正确地观看'.submittable',因为当点击一个复选框时我甚至无法收到闪光警告。
任何指针?我忘记了什么吗?感谢。
index.html.erb
<table class="table table-striped">
<tr>
<th>Task Description</th>
<th width="15%">Days Left</th>
<th width="15%">Completed?</th>
</tr>
<% @tasks.each do |task| %>
<tr>
<td><%= task.description %></td>
<td><%= task.days_remaining %> days left</td>
<td><%= form_for task, remote: true do |f| %>
<%= f.check_box 'completed', id: "task-#{task.id}", class: 'submittable' %>
<% end %>
</td>
</tr>
<% end %>
</table>
的application.js
$('.submittable').on('change', function() {
$(this).closest('form').submit();
});
update.js.erb
<% if @task.updated? %>
$('#task-' +<%= @task.id %>).prepend("Yes");
<% else %>
$('#task-' +<%= @task.id %>).prepend("<div class='alert alert-error'><%= flash[:error] %></div>");
<% end %>
答案 0 :(得分:4)
您的代码似乎没有包含在对$(document).ready()
的调用中,因此jQuery可能会在您的复选框加载之前尝试绑定事件。试试这个:
$(document).ready(function () {
$('.submittable').on('change', function() {
$(this).closest('form').submit();
});
});
答案 1 :(得分:1)
你必须等到dom加载
$(function(){
$('.submittable').on('change', function() {
$(this).closest('form').submit();
});
});
然后确保在您的控制器更新操作
respond_to do |format|
if @object.update(object_params)
.
.
format.js
else
.
.
end
end
看到这个episode的railscast他正在解释你想做什么