我有一个表单,其中使用jquery动态添加或删除字段。 (railscast#196/7)
在我的使用案例中,我正在查看购买表单,因此我想从默认数量1开始,每link_to_add_fields
次提交递增1,而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));
}
答案 0 :(得分:0)
如果您要跟踪数量,只需跟踪数量。不要通过尝试添加表单和减去表单来使这一点复杂化。在函数remove_fields(link)中:
$(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++
除了以下内容之外,删除数量的伪造代码看起来相同:
Quantity-- unless 0
对不起,我对jquery选择器不能更具体,但没有HTML标记很难做到。看这个例子(如果jsfiddle没有关闭): http://jsfiddle.net/xrfsG/9/
然后在你的rails中创建或保存控制器动作,params会更加简单。