2011-07-20 161 views
0

我有一個訂單表單,用戶可以使用ajax動態添加或刪除票證(類似於railscast#197,它是一個嵌套表單)。每張票據都會顯示票價(一個ruby實例變量 - @ event.ticket_price)和一個「價格」類。使用jQuery通過id加總/減去動態元素

我發現了一個片斷別處我適於總結與類的「價格」元素和在ID爲「TOTAL_PRICE」

$('#total_price').html(function() { 
var a = 0; 
$(".price").each(function() { 
a += parseInt($(this).html()); 
    }); 
return a; 
}); 

這產生的總價格一個div顯示結果時附加票鏈路被點擊,但是當頁面最初加載時它什麼也沒有顯示(它應該有一個默認情況下存在的票的價格)。另外,當一張票被刪除時,我需要一個函數從總數中減去該票的價格。 最後,我寧願價格是美元,但當我這樣做時得到NaN,我想我需要某種類型的正則表達式?

新的鐵軌,更新的jquery,將不勝感激這一些幫助,謝謝!

刪除票功能

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

對於第一個問題,我不知道你的代碼的其餘部分的結構,但價格可能不會根據執行javascript的時間而顯示。我建議製作一個名爲「displayPrice」的函數,並將代碼粘貼到那裏。調用函數被點擊您的按鈕時,也把它當身體完全加載像這樣:

<body onload="displayPrice()">

對於消除一票,你可以刪除與類「價格」的對象,然後簡單地調用'displayPrice'函數。

對於美元符號,設置函數返回的

return '$' + a 

的Javascript應該處理的類型轉換爲您服務。

+1

不要通過onload調用函數,而應該使用jQuery ready函數。 '$(displayPrice());' – Clayton

+0

謝謝@Clayton編輯了這個問題以包含相關函數。欣賞答案仍然不知道該怎麼辦tbh。在正則表達式中,我使用rails helper number_to_currency來呈現例如10.5,價格爲10.50美元,但這會導致jQuery函數中的NaN。 –

+0

@Mil Ruane如果每個'.price'值之前都有一個$符號,則在嘗試解析該值之前,您需要將其除去。試試'$(this).html()。replace(/ [^ 0-9。]/g,'');'。另外如果你的值不是整數,你會想使用'parseFloat()'。 – Clayton