2012-02-12 18 views
0

私はRuby on Railsを使用して、複数の入力テキストまたは選択フィールドを持つフォームからデータベースを生成しています。私はAJAXを使用しているので、ユーザーが入力フィールドを変更するたびに、すべての入力フィールド値が自動的に考慮され、他のいくつかの結果フィールドが更新されます。javascript複数のフォームフィールドの変更を同じ関数にバインドする方法は?

最初の2つの入力フィールドには次のスクリプトですべてうまく動作しますが、50以上の入力フィールドを持つ予定があります。明示的に定義しなくてもスクリプトを実装するスマートな方法があるのでしょうか?フィールドごとに別々の機能。

同じことを50回以上繰り返さずにスクリプトの規模を調整する方法はありますか?

これは私のjs

<script type="text/JavaScript"> 
$(function(){ 
    $('.input_1_class').bind('change', function(){ 
     $.ajax({ 
      url: "<%= update_fields_projects_url %>", 
      data: { 
       input_1: $('.input_1_class').val(), 
       input_2: $('.input_2_class').val(), 
      } 
     }); 
    }); 
    $('.input_2_class').bind('change', function(){ 
     $.ajax({ 
      url: "<%= update_fields_projects_url %>", 
      data: { 
       input_1: $('.input_1_class').val(), 
       input_2: $('.input_2_class').val(), 
      } 
     }); 
    }); 
}); 
</script> 

であり、これはあなたが複数のセレクタを指定し、それらのすべてにバインドされた同じイベントを持つことができ、私のRubyのフォーム(簡易)

<%= form_for(@project, :html => {:name => "ProjectInfo"}) do |f| 
    field_set_tag "Customer Information" do %> 

    <div class="field"> 
     <%= f.label :"Input 1" %> 
     <%= f.text_field :Input_1, {:class=>"input_1_class"} %> 
     <%= f.label :"Input 2" %> 
     <%= f.text_field :Input_2, {:class=>"input_2_class"} %> 
     <%= f.label :"Output 1" %> 
     <%= f.text_field :Output_1, {:id=>"output_1_id"} %> 
    </div> 
    <% end %> 
<% end %> 

答えて

0

です:

$('.input_1_class, .input_2_class').click(function() 
{ 
    alert('Bound to both inputs'); 
}); 
+0

この応答に感謝します。私はそれを試して、それは私のために完全に動作しています。 – rh4games

1

$("form input").bind("change", function() { 
    var $form = $(this).closest("form"); 
    var data = {}; 
    $.each($form.serializeArray(), function(i, v) { data[v.name] = v.value; }); 
    $.ajax({ 
    url: $form.data('refresh'), 
    data: data 
    }); 
}); 

そして、あなたのフォームは、データリフレッシュプロパティ必要があります。その方法を

<%= form_for(@project, :html => {:name => "ProjectInfo", :data => {:refresh => update_fields_projects_url}}) do |f| 

を、あなたのAJAXのイベントハンドラは、それが動作していますフォームの特定の知識を持っている必要はありません - あなただけにバインドフォームにはデータリフレッシュ属性が設定されており、フォームのフィールドが変更されるたびにフォームのデータがそのURLに送信されます。

+0

ご連絡ありがとうございます。私はAJAXリクエストをトリガすることができましたが、 "データ"の内容を取得できませんでした。私は@データ= params [:data]を試したが、うまくいかなかった – rh4games

関連する問題