0

別の形式で要素の値にアクセスしようとしています。より具体的には、情報を送信する通常の html フォームと、データベース内のフィールドを更新する ajax フォームの 2 つのフォームがあります。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 パラメーターは別の形式であるため、ajax フォームには body パラメーターがなかったため、account.message を nil に設定します。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

bodyajax フォームに隠しフィールドを追加し、onsubmitイベントを使用しbodyて、ajax リクエストが送信される前に、通常のフォームからフィールドの値を入力できます。多かれ少なかれ次のようになります。

<%= 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 に答える