【问题标题】:Rails onChange form submit does not submit valueRails onChange 表单提交不提交值
【发布时间】:2013-02-19 06:53:37
【问题描述】:

我正在尝试创建一个带有隐藏字段和 select_tag 的简单表单。我希望在更改时提交此表单。这是我到目前为止的代码:

<%= form_for :model, :multipart => true, :remote => true, :url => target_url do |f| %><br>
      <% @array.each do |r| %><br>
        <ul class="list">
          <li class="list block">
            <%= image_tag(r.image_url(:sm_thumb)) if r.try(:images).try(:first) %><br>
            <%= r.child.try(:name) %><br>
            <%= f.hidden_field :id, :value =>  r.id %><br>
            <%= select_tag 'interested_field', options_from_collection_for_select(@array_of_choices, 'id', 'first_name'), :prompt => 'Some Message', :onChange=>"this.form.submit()" if @appropriate? %><br>
          </li>  
        </ul>
      <% end %>
    <% end %>

它在大多数情况下都有效,因为我能够提交表单 onChange,但问题是有时(而且它是随机的)选择框的值未在发送到控制器的参数中设置.因此,如果用户进行了选择,尽管用户正在选择一个值,但表单会在interested_field 中提交一个空白值,如 params[:interested_field] = ''。我一生都想不通,为什么会发生这种情况。非常感谢任何输入。

我正在使用 rails 3.2 和 ruby​​ 1.9.3

【问题讨论】:

  • 你试过javascript:this.form.submit()吗?
  • 是的,这也不起作用。
  • 在模型中添加验证,限制空白值。
  • 我正在使用 select_tag 因为表单不会修改模型。我在控制器中有逻辑来拒绝空白参数并显示错误消息,但它的用户体验仍然很差。有什么理由会这样吗?有没有更好的方法来提供更一致的用户体验?
  • 你使用Turbolinks吗?

标签: javascript ruby ajax ruby-on-rails-3 erb


【解决方案1】:

我会不显眼地做到这一点。您需要表单的 ID,现在是 #new_model。将此添加到页面的 javascript 中:

var modelForm = $("#new_model");
modelForm.find("select").change(function() {
   if( $(this).val() ) modelForm.submit();
});

如果没有价值,这至少不会提交。奇怪的是,您为同一个字段枚举了一堆选择...

【讨论】: