Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails远程窗体并选择“更改时不工作”_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Rails远程窗体并选择“更改时不工作”

Ruby on rails Rails远程窗体并选择“更改时不工作”,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我试着跟随: 但是,这些选项在submit、submit和submit上似乎都不起作用 这是我目前正在刷新页面的内容: = simple_form_for task, :remote => true, :format => :js do |f|` = f.association :status, :label => false, :include_blank => false, :input_html => {:onchange=>'this.form

我试着跟随:

但是,这些选项在submit、submit和submit上似乎都不起作用

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

= simple_form_for task, :remote => true, :format => :js do |f|`
    = f.association :status, :label => false, :include_blank => false, :input_html => {:onchange=>'this.form.submit();' }`
这只是定期发布表单并导致页面刷新


我怎样才能让它通过ajax发布,这样页面就不会刷新?

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


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

我最后按照马克的建议做了一个活动绑定

= 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();

                }
              });
只需将onchange改为:

{:onchange=>'$(this.form).submit();' }

这项工作非常出色,无需编写手动处理程序代码或跳过其他环。