Решение этой проблемы довольно сложное, но я нашел способ сделать это. Меня удивляет, что решение недоступно, поскольку, как говорит r-dub, оно кажется довольно распространенным. В итоге я не использовал никакие средства редактирования на месте плагина jQuery и вместо этого изменил текстовое поле напрямую с помощью jQuery на основе текстового поля формы. Иными словами, я следовал (B) выше.
У меня есть вид, который выглядит следующим образом:
Available: <span id="available_cr"><%= @available_credits %></span>
Remaining: <span id="remaining_cr"><%= @remaining_credits %></span>
<%= form_for(@page, :html => { :id => 'do_fvalue' }, :remote => true) do |f| %>
<div class="field">
How many to buy at <%= @cost %> credits per unit? <%= f.text_field :fvalue, :autocomplete => :off %>
</div>
<div class="field">
How many to buy at <%= @cost_20 %> credits per unit? <%= f.text_field :gvalue, :autocomplete => :off %>
</div>
<div class="actions">
<%= f.submit "Update" %>
</div>
<% end %>
Затем я вставляю переменные rails @ в партиал .html.erb (отображается в начале моей страницы .html.erb), чтобы javascript / jQuery мог получить к ним доступ:
<script type="text/javascript">
var cost = parseInt(<%= @cost %>)
var cost_20 = parseInt(<%= @cost_20 %>)
var available_credits = parseInt(<%= @available_credits %>)
var remaining_credits = parseInt(<%= @remaining_credits %>)
</script>
Затем в public / javascripts / Applications.js у меня есть следующий код:
function checkFields(){
var to_buy_f = $("#page_fvalue").val();
var to_buy_g = $("#page_gvalue").val();
var subtract_f = to_buy_f * cost;
var subtract_g = to_buy_g * cost_20;
var remain = available_credits - subtract_f - subtract_g;
$("#remaining_cr").text(remain);
};
$("#page_fvalue").keyup(function () {
checkFields();
}).keyup();
$("#page_gvalue").keyup(function () {
checkFields();
}).keyup();
Функция checkFields обновляет #remaining_cr на основе значений, найденных в #page_fvalue и #page_gvalue. Обратите внимание, что он использует available_credits, cost и cost_20, которые мы вставили в переменные javascript выше. Последние две функции сообщают jQuery контролировать #page_fvalue и #page_gvalue для событий keyup. Когда пользователь нажимает клавишу, он вызывает checkFields () для обновления # оставающегося_кр.
Все это в стороне, когда пользователь нажимает «отправить» в форме, вся форма отправляется с текущими значениями. Я не знаю, является ли это наиболее эффективным способом сделать то, что я пытался сделать, но это работает!