Суммирование значений на основе количества полей динамической формы - PullRequest
1 голос
/ 02 августа 2011

У меня есть форма, где поля добавляются или удаляются динамически с помощью jquery.(railscast # 196/7)

В моем случае использования я смотрю на форму покупки, поэтому я хотел бы начать с количества по умолчанию, равного единице, увеличивая на 1 для каждой link_to_add_fields отправки и наоборотдля отправки link_to_remove_fields, поэтому в конце я могу получить свою общую стоимость, т.е. quantity x @event.price.

Так что, если бы у меня было 3 link_to_add_fields и 2 link_to_remove_fields, это было бы

# 1 is default, 3 is link_to_add_fields, 2 is link_to_remove_fields
(1 + (3 - 2)) x @event.price
# or
2 x @event.price

Мои знания jquery очень малы, поэтому я бы предпочел решение ruby, если это возможно,

спасибо!

Помощник приложения

def link_to_remove_fields(name, f)  
    f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)")  
  end  
end  

def link_to_add_fields(name, f, association)  
  new_object = f.object.class.reflect_on_association(association).klass.new   
  fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|  
    render(association.to_s.singularize + "_fields", :f => builder)  
  end  
  link_to_function(name, "add_fields(this, '#{association}', '#{escape_javascript(fields)}')")

end

application.js

function remove_fields(link) {
  $(link).prev("input[type=hidden]").val("1");
  $(link).closest(".fields").hide();
}

function add_fields(link, association, content) {
  var new_id = new Date().getTime();
  var regexp = new RegExp("new_" + association, "g")
  $(link).parent().before(content.replace(regexp, new_id));
}

1 Ответ

0 голосов
/ 12 октября 2011

Если вы пытаетесь отслеживать количество, просто отследите количество. Не усложняйте это, пытаясь добавить формы и вычесть формы. В функции remove_fields (ссылка):

$(link).prev("input[type=hidden]").val("1");

Скрывается. Это значение в .val () должно быть уменьшено до 0. Если вы добавляете количества, увеличьте значение. Это будет намного проще, чем пытаться сосчитать все формы, которые будут включать больше jquery, а не меньше.

psuedocode будет выглядеть примерно так:

On click "add quantity", find the line item (either this or a jquery selector)
Within the line item, find the quantity hidden value
Quantity++

psuedocode удаляемого количества будет выглядеть так же, кроме:

Quantity-- unless 0

Извините, я не могу сказать более конкретно о селекторах jquery, но без HTML-разметки трудно обойтись Посмотрите этот пример (если jsfiddle не выключен): http://jsfiddle.net/xrfsG/9/

Тогда в ваших рельсах создайте или сохраните действие контроллера, параметры будут намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...