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

时间:2011-11-18 04:55:15

标签: ruby-on-rails ruby-on-rails-3

我试图关注:Rails: submit (via AJAX) when drop-down option clicked

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

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

= 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发布,以便页面不会刷新?

3 个答案:

答案 0 :(得分:12)

只需将onchange更改为此内容:

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:4)

根据Marc的建议,我最终制作了一个事件绑定

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

                }
              });