Rails表示没有使用ajax进行更改

时间:2014-10-04 01:06:39

标签: javascript jquery ruby-on-rails ruby ajax

我正在开发一个带有ruby on rails的小型待办事项列表应用程序,当我选择一个复选框时,我想通过ajax提交表单。我一直在关注this guide尝试这样做。

更改复选框虽然没有提交表单,所以我在SO上搜索了类似的问题,并对我的代码进行了一些更新。

  1. 使用on() instead of live()
  2. 提交closest form instead of form.first,因为我在同一页面上有这些表单的列表
  3. 它仍然不会提交。我感觉它没有正确地观看'.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 %>
    

2 个答案:

答案 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他正在解释你想做什么