1

私は simple_nested_form を使用しており、これを顧客請求フォームに持っています

<%= simple_nested_form_for @customer_bill do |f| %>
 <%= f.error_messages %>

 <%= f.label :employee_id %>
    <%= f.collection_select :employee_id, Employee.all,:id,:name, {:prompt => "Select Employee"}, :style => 'width:205px;' %><br />

            <%= f.label :date %>
            <%= f.datepicker :date, :dateFormat => 'dd MM, yy',  :showOn => "both", :buttonImage => "../assets/calendar.gif", :buttonImageOnly => true, :changeMonth => true, :changeYear => true, :placeholder => "Click on the Calender" %><br/>          

 <p><%= f.link_to_add "Add Product", :customer_bill_line_items %> </p>
  <p><%= f.submit %></p>
<% end %>

「製品を追加」をクリックすると、次の部分がレンダリングされます

 <%= javascript_include_tag 'calculations' %>
     <hr/> 
    <%= f.hidden_field :user_id, :value => current_user.id %>
    <%= f.hidden_field :customer_bill_id %>

    <%= f.label :product_id %>
    <%= f.collection_select :product_id,Product.all,:id,:title, :prompt => "Select a Product", :style => 'width:150px;' %>&nbsp;&nbsp;&nbsp;<%= f.link_to_remove "Remove Product"%>
    <br/>

     <p class="fields">
<%= f.input :price, :class =>"price" %>
<br/>
<%= f.input :quantity, :class =>"qty" %><br/>

<%= f.input :amount, :class =>"amount"%><br/>
</p>

そして、私はこれを私のCalculations.jsに持っています

jQuery(document).ready(function(){
jQuery(".price, .qty").keyup(function() {
        var p = jQuery(".price").val();
        var q = jQuery(".qty").val();
        jQuery(".amount").val(q * p);
    });
});

</p>

ここでの問題は、最初に「製品を追加」をクリックして「価格」と「数量」を入力すると、金額がjsファイル内で計算され、「金額」フィールドに表示され、2回目に製品を追加をクリックすると、最初の計算がレンダリングされました.jsファイルは、すべての「金額」フィールドで最初に計算された値を表示しているようです

問題に見えるのは?パーシャルを呼び出すたびに適切な計算を行うにはどうすればよいですか? 緊急に助けが必要です。前もって感謝します

4

1 に答える 1

0

「製品の追加」パーシャルが 2 回目にレンダリングされると、ページに重複したid値 ( priceqtyamount) を持つ要素がいくつかあります。これは無効な HTML であり、jQuery はどの HTML にバインドするつもりなのかを判断できませんkeyup

この問題を回避するには、パーシャルと jQuery を書き直してみてください。適切に一意の ID を生成するかkeyup、別のプロパティ (おそらくクラス?) にフックします。後者の方法を取る場合は、新しい製品ごとliveに新しいバインディングを追加するのではなく、jQuery を呼び出しとしてページに配置することも検討できます。keyup

于 2012-04-26T08:22:42.733 に答える