I have some dynamically generated fields in the form. see code below.
<% count = 0 %>
<% @details.each do |detail| %>
<div class="row">
<div class="col l3">
<div class="input-field string optional disabled bill_bill_details_item_name">
<input class="string optional disabled" disabled="disabled" type="text" name="bill[bill_details_attributes][<%= count %>][item_name]" id="bill_bill_details_attributes_<%= count %>_item_name" value="<%= detail.item_name %>" />
<input type="hidden" name="bill[bill_details_attributes][<%= count %>][item_name]" id="bill_bill_details_attributes_<%= count %>_item_name" value="<%= detail.item_name %>" />
</div>
</div>
<div class="col l3">
<div class="input-field decimal optional disabled bill_bill_details_quantity">
<input class="numeric decimal optional disabled" disabled="disabled" type="number" step="any" name="bill[bill_details_attributes][<%= count %>][quantity]" id="bill_bill_details_attributes_<%= count %>_quantity" value="<%= detail.item_quantity %>" />
<input type="hidden" name="bill[bill_details_attributes][<%= count %>][quantity]" id="bill_bill_details_attributes_<%= count %>_quantity" value="<%= detail.item_quantity %>" />
</div>
</div>
<div class="col l3">
<div class="input-field decimal optional bill_bill_details_cost">
<input class="numeric decimal optional" type="number" step="any" name="bill[bill_details_attributes][<%= count %>][cost]" id="bill_bill_details_attributes_<%= count %>_cost" />
<input type="hidden" name="bill[bill_details_attributes][<%= count %>][item_type]" id="bill_bill_details_attributes_<%= count %>_item_type" value="<%= detail.item_type %>" />
<input type="hidden" name="bill[bill_details_attributes][<%= count %>][item_id]" id="bill_bill_details_attributes_<%= count %>_item_id" value="<%= detail.item_id %>" />
</div>
</div>
<div class="col l3">
<div class="input-field decimal optional disabled bill_bill_details_item_total">
<input class="numeric decimal optional disabled" disabled="disabled" type="number" name="bill[bill_details_attributes][<%= count %>][item_total]" id="bill_bill_details_attributes_<%= count %>_item_total">
<input type="hidden" name="bill[bill_details_attributes][<%= count %>][item_total]" id="bill_bill_details_attributes_<%= count %>_item_total" />
</div>
</div>
</div>
<% count += 1 %>
<% end %>
Which generate something like:
I need to have the user enter the cost of each item and then automatically calculate the value in the final column. I have tried blur by adding a class to the cost input but it causes issues as it triggers the blur event almost 100 times before it returns the access back,
What is the best way to be able to achieve this? I am hoping for a nonobtrusive solution using CoffeeScript.
The way I was finally able to do this was by adding a class to the dynamic fields generating code. So although the id of the field changes I will still have a class which remains constant.
I can then call a on change on the class and pick up the required detail.
Eaxmple code below.
$(document).on('change', 'input.mycost', function() {
var cost, id, quantity, quantity_id, total, total_id;
// this will provide me with the count variable value
// as i know it will always be in this position of the string.
id = this.id.split('_')[4];
// I can then use the same to get generate the id's of other tags.
// and perform the calculations I need to make.
total_id = '#bill_bill_details_attributes_' + id + '_item_total';
quantity_id = '#bill_bill_details_attributes_' + id + '_quantity';
quantity = parseFloat($(quantity_id).val());
cost = parseFloat($(this).val());
total = quantity * cost;
return $(total_id).val(total.toFixed(2));
});