0

我正在 Rails 3.0.3 上开发并使用 jQuery。这是我的 javascipt 包含标签:

<%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", "rails.js" %>

我想在更改下拉列表时发送 JS 请求并编写以下代码来执行此操作。此表单不会作为 JS 处理,而是作为 HTML 请求处理:

<% form_tag(aggregatedata_path, :method=>'post', :id => "dd-container", :remote => true ) do %>
    <%= select_tag( 
        :group, 
        options_for_select(groups_list, @group), 
        {
            :id => "dd", 
            :onchange => "this.form.submit();"
        } ) %>
<% end %>

我在 SO 上阅读了一篇类似的帖子,该帖子表明问题出在 js 库上,但除非没有其他办法,否则我宁愿避免在这一点上改变这一点,以免一百万其他事情中断。我有另一种形式作为 JS 请求处理就好了。这里是:

<% form_tag(poweroutput_path, :method=>'post', :id => "date-form", :remote => true ) do %>
    <%= text_field_tag(
        'dt', nil,
        {  
            :id => 'date-field',
            :class => 'dateformat-d-dt-m-dt-Y',
            :value => Time.now.getlocal.strftime("%d.%m.%Y")             
        }) %>
    <%= submit_tag " ", :id => "go-button" %>
<% end %>

我看到的唯一明显区别是第一个使用:onchange => "this.form.submit();",而第二个没有。该函数中是否有某些内容覆盖了我之前的内容:remote => true

4

2 回答 2

1

当我搜索“Rails 3 远程表单”时,我得到的第一个点击就是这个链接:

http://www.alfajango.com/blog/rails-3-remote-links-and-forms/

它在第一组要点中解释了它,讨论了什么:remote => true

  1. 它找到远程链接、表单和输入,并覆盖它们的点击事件以通过 AJAX 提交给服务器。

由于您是手动提交表单,我认为任何点击处理程序都被绕过了。

于 2012-06-06T22:27:37.123 回答
1

我同意戴夫。既然你已经在使用 jQuery,我会选择这样的:

$('#dd-container').change(function(){
  $.ajax({
    type: "POST",
    url: your_path,
    data: $(this).find('option:selected').attr('value'),
    success: function( response ) {
      console.log( response );
    }
  });
});

哦,别忘了从表单中删除:onchange => "this.form.submit();"and 。, :remote => true

于 2012-06-06T22:39:16.310 回答