2011-12-22 8 views
2

特定の製品用のラジオボタンがあります。私はクリックした各ラジオボタンの合計を追加するフォームの下部に合計ボックスを持つことができるようにしたいと思っています。私はこれがラジオボタンの値を介して、その後いくつかのJavaScriptを使用して行うことができます知っている。ラジオボタンの計算

問題は、以下のコードにどのように値が必要なので、私はそのメソッドを使うことができないと思います。フォーム送信から電子メールを受け取ると、ユーザーが選択したオプションを確認できます。

JavaScriptを使用せずに、または値を使用しないでください。

<input class="radio" type="radio" name="keystage1yr1" value="Paper" /> <span>&#163;25</span> 

<input class="radio" type="radio" name="keystage1yr1" value="CD" /> <span>&#163;25 excl VAT</span> 

<input class="radio" type="radio" name="keystage1yr1" value="Paper & CD" /> <span>&#163;40 excl VAT</span> 

<input class="radio" type="radio" name="keystage1yr2" value="Paper" /> <span>&#163;25</span> 

<input class="radio" type="radio" name="keystage1yr2" value="CD" /> <span>&#163;25 excl VAT</span> 

<input class="radio" type="radio" name="keystage1yr2" value="Paper & CD" /> <span>&#163;40 excl VAT</span> 

<input class="radio" type="radio" name="keystage1save" value="Paper" /> <span>&#163;47.50</span> 

<input class="radio" type="radio" name="keystage1save" value="CD" /> <span>&#163;47.50 excl VAT</span> 

<input class="radio" type="radio" name="keystage1save" value="Paper & CD" /> <span>&#163;75 excl</span> 

それは、各ラジオボタンにprice="20"などのようなものを追加して、これらを合算することはできますか?

EDIT

@Jamiec答えは余分な「データ・価格」felidを追加し、いくつかのJavaScriptを使用して、最大総額完璧にうまくいきました。

私はJamiecコードで遊んだ後、チェックされたがチェックされていないラジオボタンの合計が増えていることに気付きました。

name="keystage1yr1"から一つだけのラジオボタンを name="keystage1yr2"から 一つだけのラジオボタンを

を選択することができます。しかしname="keystage1save"から任意のラジオボタンは、その後、任意のラジオを選択した場合に選択することができ

:私はまた、次の処理を行い、いくつかのJavaScriptを持っていたよう選択されているname="keystage1yr1"およびname="keystage1yr2"のボタンは選択解除されます。

@Jamiecによって提供されるjavascriptでは、name="keystage1save"が選択されている場合、合計にはname="keystage1yr1"name="keystage1yr2"の値が残っているという問題があります。私はいくつかの並べ替えを使用して問題

+0

あなたは、HTML5のために行くしない限り、あなたは、属性を発明することはできません。あなたはできますが、それは有効ではありません。 –

+0

待ち、これはラジオボタンなので、1つしか選択できません。何をしたいですか? – Jamiec

+0

@Jamiecいいえ、VATを計算する必要はありません。 3つのセットから1つだけを選択できます。しかし、私は合計価格を合計するためにチェックされているオプションが欲しいです。 – Matt

答えて

2

Javascriptがない、ない - 確かにない。

はい、Javascriptを使用して次の各ラジオのスパン内のテキストを解析 - はい、Javascriptを使用して、生量を含む無線に余分な属性を追加するが、かなりトリッキー

- 非常に難しいことではありません

余分な属性(好ましくはdata-amount)を追加すると、jQueryのようなライブラリを使用して、はい - easy peasy lemon squeezy!


jQueryを使用した例です。

<input class="radio" type="radio" name="keystage1yr1" value="Paper" data-price="25" /> <span>&#163;25</span> 

は次のように合計フィールドを追加します:

<input id="total" type="text"> 

し、次のコードを使用して、あなたのラジオのように各の拡張

var values = {}; // index to store the selection from each named group of radio's 

$('input:radio').change(function(){ 
    var name = $(this).attr('name'); 
    values[name] = parseFloat($(this).data('price')); 
    var total = 0.0; 
    $.each(values,function(i,e){ 
     total += e; 
    }); 
    $('#total').val(total.toFixed(2)); 
}); 

ライブ例:http://jsfiddle.net/UL2JP/


編集、上記のコードのみがチェックされ、それらのチェックボックスを追加しない、残念ながら、それは以前javascriptオブジェクトvaluesで選択されているものをキャッシュします。コードを使用してチェックボックスの選択を解除した場合は、選択した内容を再計算する必要があります。

このコードの更新、あなたのコメントで記述するものを行うために表示されます。

var values = {}; 

$('input[name="keystage1save"]').click(function(){ 
    $('input:radio:not([name="keystage1save"])').prop('checked',false); 
    values = {}; 
}); 

$('input:radio').change(function(){ 
    var name = $(this).attr('name'); 
    values[name] = parseFloat($(this).data('price')); 
    var total = 0.0; 
    $.each(values,function(i,e){ 
     total += e; 
    }); 
    $('#total').val(total.toFixed(2)); 
}); 

ライブ例:http://jsfiddle.net/UL2JP/1/


編集2:ちょうど考え、必要はありません実際に選択した値をキャッシュするには、オンザフライで計算するほうが速いでしょう:

$('input[name="keystage1save"]').click(function(){ 
    $('input:radio:not([name="keystage1save"])').prop('checked',false); 
}); 

$('input:radio').change(function(){ 
    var total = 0.0; 
    $('input:radio:checked').each(function(){ 
      total += parseFloat($(this).data('price')); 
    }); 
    $('#total').val(total.toFixed(2)); 
}); 

ライブ例:http://jsfiddle.net/UL2JP/2/あなたは3つのことを行うことができ

+0

属性を追加すると有効なHTML 4はありません。 –

+0

各ラジオボタンにprice = "20"などを追加して追加することはできますか? – Matt

+0

いいえ、有効なHTML5が良いでしょう;) – Jamiec

1

あなたがこれを構築する場合に、固定キャッシュ内の値を格納しないように選択

EDIT2 @Jamiec更新答えているラジオボタンから合計を計算し、それを必要としますサーバー側のコードの、それを使用して合計価格を計算する

+0

私はそれをWordpressに構築しています、これはラジオボタンで選択された製品の注文フォームのカスタムページです提出されます。フォームが提出されるときに値を持つことができるだけでなく、それぞれの価格が加算できる値を持つ必要があります。 – Matt

+0

本当に建設的なものではなく、有効なオプションを求めています。 –

+0

おそらく、単純なdouble値を持つ別の要素を追加することができます。 JSを使用して、選択したラジオに対応するものをループしてカウントしてください。 –

2

  • 使用してAJAXは、EN、それが適切にサーバーサイド
  • は、ラジオボタンと値のIDを持つ配列を作成してください、とのonClick検索値を加算して合計に加えます
  • 値を格納するためにID属性を誤って使用し、いくつかのJSを書き込んで追加します。例えば#val1_1#val2_4など(推奨されません)

あなたは私がこれらのオプションのいずれかにeleborateしたいと思います。

AJAXを使用したくない場合は、オプション2にすることをお勧めします。これはかなりエレガントです。

HTML:

<input class="radio" type="radio" id="ks1p" name="keystage1yr1" value="Paper" /> <span>&#163;25</span> 

<input class="radio" type="radio" id="ks1c" name="keystage1yr1" value="CD" /> <span>&#163;25 excl VAT</span> 

<input class="radio" type="radio" id="ks1cp" name="keystage1yr1" value="Paper & CD" /> <span>&#163;40 excl VAT</span> 

<input class="radio" type="radio" id="ks2p" name="keystage1yr2" value="Paper" /> <span>&#163;25</span> 

//etc.. 

JS:

var prices= new Array(); 
prices["ks1p"]=1; 
prices["ks1c"]=2; 
prices["ks1cp"]=3; 
//etc 
var lastPrice = new Array(); 
lastPrice ["keystage1yr1"]=0; 
lastPrice ["keystage1yr2"]=0; 
//etc 
var totalPrice = 0; 
$('.radio').click(function(){ 
    var id = $(this).attr('id'); 
    var name= $(this).attr('name'); 
    if(lastPrice[name] != 0){ 
    totalPrice = totalPrice - lastPrice[name]; 
    } 
    lastPrice[name] = prices[id]; 
    totalPrice = totalPrice + prices[id]; 
    alert(totalPrice); 
}); 

はフィドル:http://jsfiddle.net/nggLr/

+0

もう少し喜んで助けてくれたら嬉しいです。それぞれのラジオボタンにprice = "20"などを追加して追加することは可能ですか? – Matt

+0

再度、有効なHTML4はありません。あなたが配列のアプローチを使用する場合、あなたは素晴らしく有効で洗練されたソリューションを持っています。私は説明します。 –

+0

私はこのソリューションのようなものですが、javascript配列のすべての価格を維持しなければなりません。 HTML表示価格を更新し、総価格が他の場所で計算されることを忘れることを意味します。私のソリューションは同じ問題を抱えていますが、少なくとも価格はすべて一緒にマークアップされています...また、HTML4も、本当ですか? 1996年に呼び出され、古くて無関係なスペックを求めました! – Jamiec

関連する問題