Rails远程表单并选择更改不起作用

Jos*_*osh 6 ruby-on-rails ruby-on-rails-3

我试图遵循:Rails:当点击下拉选项时提交(通过AJAX)

但是这些选项都不起作用(在提交,提交)

这是我目前刷新页面的内容:

= simple_form_for task, :remote => true, :format => :js do |f|`
    = f.association :status, :label => false, :include_blank => false, :input_html => {:onchange=>'this.form.submit();' }`
Run Code Online (Sandbox Code Playgroud)

这只是定期发布表单并使页面刷新.

如何让它通过ajax发布,以便页面不会刷新?

cil*_*hex 12

只需将您更改onchange为此:

{:onchange=>'$(this.form).submit();' }
Run Code Online (Sandbox Code Playgroud)


Mar*_*arc 5

尽管 rails 会在您添加 :remote => true 时覆盖默认操作并通过 AJAX 提交,但您正在强制表单在 onchange 事件中发布常规内容。

您需要创建自己的函数以通过 AJAX 提交并从您的 onchange 调用它,使用 $.post() $.post()将表单发送到服务器。


Jos*_*osh 5

我最终按照马克的建议进行了事件绑定

= simple_form_for task, :remote => true, :format => :js, :html => {:id => "task_#{task.id}_status"} do |f|
            = f.association :status, :label => false, :include_blank => false, :input_html => {:id => "task_#{task.id}_status_select" }

:javascript
        jQuery(function($) {
          $(document).ready(function() {
            $("#task_#{task.id}_status_select").bind("change", function() {
              $.ajax({
                type: "PUT",
                url: '#{project_story_type_story_task_path(@project, @story_type, @story, task)}',
                data: 'task[status_id]=' + $('#task_#{task.id}_status_select').val(),
                complete: function() {
                  $('#task_#{task.id}_status').prepend("<span id='task_#{task.id}_success' class='label success right'>SAVED</span>");
                  $('#task_#{task.id}_success').delay(500).fadeOut();

                }
              });
Run Code Online (Sandbox Code Playgroud)