0

我正在尝试以不同的形式访问元素的值。更具体地说,我有两种表单,一种是提交信息的普通 html 表单,另一种是更新数据库中的字段的 ajax 表单。我希望 ajax 表单以正常形式获取元素的值,但我不知道如何实现。这是我当前的设置:

消息视图

<%= form_for @message do |f| %>
    <%= f.text_field :to %>
    <%= f.text_area :body %>
    <%= f.submit "Send Message" %>
<% end %>
<%= form_for :save, :url => save_message_path(), :remote => :true do |f| %>
    <%= f.submit "Save" %>
<% end %>

消息控制器

def save
    account.message = params[:body]
end

但是 :body 参数是另一种形式,因此它将 account.message 设置为 nil,因为 ajax 表单没有 body 参数。我想要它,以便 ajax 表单可以提交 body 元素的值。

4

2 回答 2

2

由于表单是在客户端编辑的,因此您必须在 javascript 中编写此功能。

将消息体的值复制到隐藏字段中并提交 Ajax 表单相对简单。这最容易通过在 ajax 表单中添加一个 id 来完成,如下所示:

<%= form_for :save, :url => save_messages_path(), :remote => true, :id => 'ajaxform' %>
  <%= hidden_field_tag 'hidden_message' %>

然后在javascript中,您可以执行以下操作:

$(document).ready(function(){
  $("#ajaxform").submit(function() {
    $("#hidden_message").val($("#message_body").val());
    return true;
  });
}
于 2012-08-23T20:05:33.367 回答
1

body您可以在您的 ajax 表单中添加一个隐藏字段,并在发送 ajax 请求之前使用一个onsubmit事件使用普通表单中的字段值填充它。body它或多或少看起来像这样:

<%= form_for @message do |f| %>
    <%= f.text_field :to %>
    <%= f.text_area :body, :class => 'main_body_field' %>
    <%= f.submit "Send Message" %>
<% end %>
<%= form_for :save, :url => save_message_path(), :remote => :true, :id => 'ajax_form' %>
    <%= f.hidden_field :body, :class => 'hidden_body_field' %>
    <%= f.submit "Save" %>
<% end %>

javascript(使用 jQuery):

$(function() {
    $("ajax_form").submit(function() {
      // copy body value from first form to the second one
      $('.hidden_body_field').val($('.main_body_field').val());
      return true;
    }
}
于 2012-08-23T20:03:55.243 回答