2011-08-01 72 views
1

我有一個表單,其中使用jquery動態添加或刪除字段。 (railscast#7分之196)基於動態表單域的數量求和值

在我的使用情況下,我期待在購買形態,所以我想先談一個的默認數量,以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的知識非常少,所以我希望能有一個解決方案紅寶石如果可能的話,

的感謝!

應用助手

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

謝謝@iWasRobbed! –

回答

0

如果你想跟蹤的數量,只是跟蹤量。不要通過嘗試添加表單和減少表單來使其複雜化。在函數remove_fields(鏈接)中:

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

正在被隱藏。 .val()中的該值應遞減至0.如果要添加數量,請增加該值。這將比試圖計算所有會涉及更多jquery的表單要容易得多。

的僞代碼將是這個樣子:

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中創建或保存控制器動作,參數將會更加簡單。