为什么我的表单被处理为HTML请求而不是JS?

时间:2012-06-06 21:43:21

标签: jquery ruby-on-rails

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

<%= 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。该函数中是否有某些内容覆盖了我之前的{{1}}?

2 个答案:

答案 0 :(得分:1)

当我搜索“Rails 3 remote form”时,我得到的第一个打击拉起了这个链接:

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

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

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

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

答案 1 :(得分: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();", :remote => true