2011-07-20 14 views
0

私は、ユーザーがajaxを使用して動的にチケットを追加または削除できるオーダーフォームを持っています(ネストされたフォームの場合はrailscast#197と同様です)。各チケットはチケット価格(ルビーインスタンス変数 - @ event.ticket_price)をクラス 'price'で表示します。jQueryを使用したidによる動的要素の合計/減算

私が見つかりました。私はクラスの価格 "を持つ要素を合計し、これは、合計金額を生成

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

ID「TOTAL_PRICE」とdiv要素に結果を表示するようになって別の場所にスニペットとき追加チケットリンクページが最初に読み込まれたときには何も表示されません(デフォルトでは1つのチケットの価格が必要です)。また、チケットが削除されたときには、そのチケットの価格を合計から引く機能が必要です。 最後に、私は価格がドルであることを望んでいますが、これを行うときに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'関数を再度実行します。ドル記号については

は、Javascriptがあなたのための型変換を処理する必要があります

return '$' + a 

として返すように機能を設定します。

+1

関数をonloadで呼び出す代わりに、jQuery準備関数を使用する必要があります。 '$(displayPrice());' – Clayton

+0

Thanks @ Claytonは質問に関連する関数を含めるように編集しました。何をすべきかまだ分かっていない回答を評価してください。正規表現では、レールヘルパーのnumber_to_currencyを使って10.5を 'price'の$ 10.50としてレンダリングしていましたが、これはjquery関数のNaNを引き起こします。 –

+0

@Mick Ruaneそれぞれの '.price'値の前に$記号がある場合は、値を解析する前にそれを削除する必要があります。 '$(this).html()。replace(/ [^ 0-9。]/g、 '');'を実行してください。また、値が整数でない場合は、 'parseFloat()'を使いたいでしょう。 – Clayton

関連する問題