dポイントプレゼントキャンペーン実施中!

ラジオボタンのnameに別々の文字列を入れてもグループにするには?

前回こちらで、チェックボックスとラジオボタンの値を合計する方法を教えていただきました。
これで、ラジオボタンのnameを任意の文字列にした場合、グループにならないので全部選択できてしまいます。
nameを商品名、valueを価格として使いたいので、任意のnameを使用かつ一つだけ選択させるにはどうしたらよいでしょうか。
こちらの質問が正解に近いのかなと思いますが、どのように応用したらいいのかわかりません。http://oshiete.goo.ne.jp/qa/796874.html

ご助言頂ければ幸いです。よろしくお願いいたします。


javascript(test_checked2.js)↓
function calc2() {
var i = 0, f, frms = document.forms;
var j, el, total = 0, num;
while (f = frms[i++]) {
j = 0;
while (el = f.elements[j++]) {
if (el.checked && (el.type == 'radio' || el.type == 'checkbox') && !isNaN(el.value)) total += 1 * el.value;
}
}
num = total.toString();
while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
document.getElementById('ch_all').innerHTML = '\\' + num;
}

html↓
<html>
<head>
<script type="text/javascript">

</script>
<script type='text/javascript' src='test_checked2.js'></script>
</head>
<body>
<div id="ch_all" style="background-color: #eeeeee;"></div>
<hr />
<form name="Tform1">
<input type="radio" name="test" value="34500" onclick="calc2()">
\34,500
<input type="radio" name="test" value="15000" onclick="calc2()">
\15,000
<input type="radio" name="test" value="3000" onclick="calc2()">
\3,000
<input type="radio" name="test" value="4444" onclick="calc2()">
\4,444
</form>
<form name="Tform2">
<input type="checkbox" name="test2" value="34500" onclick="calc2()">
\34,500
<input type="checkbox" name="test2" value="15000" onclick="calc2()">
\15,000
<input type="checkbox" name="test3" value="3000" onclick="calc2()">
\3,000
<input type="checkbox" name="test4" value="4444" onclick="calc2()">
\4,444
</form>
</body>
</html>

A 回答 (5件)

回答じゃないけど参考までに。



>nameに別々の文字列を入れてもグループにするには?
これはめんどうくさそう。それにHTMLで出来る事をわざわざ出来ないようにしておいてjavascriptで元に戻すって無駄。

nameはやはり合わせておいて
value="商品名:価格"
みたいにしてvalueを扱うときに商品名と価格に分割した方がまだ楽そう。

あるいは
<label onclick="calc2()"><input type="radio" name="test" value="34500">商品名1</label>
<label onclick="calc2()"><input type="radio" name="test" value="15000">商品名2</label>
こんな感じにしておいてテキストから商品名を取得するとか。
(ラジオボタンやチェックボックスにはlabelをちゃんと付けるととっても操作がしやすくなるのでおすすめ)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

やっぱり、ラジオボタンの機能をわざわざ使えなくするのは無駄ですよね。反省。
labelを使ってテキストから商品名を取得するのは、まったく考えていなかったので、とても参考になります。詳しく調べてみます。

お礼日時:2010/07/09 06:38

そもそも、クライアントから送られてくる「価格」は不正に修正されている


可能性が高いと理解する必要があります。
商品に関する個別の情報はサーバー側でデータをもっていればよいので、
価格自体を送らせる必要は皆無です。
なので、商品のIDと数量だけ送る仕組みにすれば何の問題もありません。

javascriptでバリデートするのであれば、別途配列で価格表をつくっておけば
radioなどのvalueに埋め込む必要はありません。

いずれにしてもradioで処理するのにnameを無理やり変えて処理するのは
無駄ばかり多くて得るものがなく、やるべきではないことの代表のようなものです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

商品に関する個別の情報をサーバーで…ショッピングカートを用意しないといけませんね。
そこまで本格的な開発は考えていませんでした、すみません。
radioを改変するのはやはり無謀なようですのでやめます。
配列で価格表、参考にさせていただきます。

お礼日時:2010/07/09 07:22

私ならclassで分類してみますが。

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

クラスの使い方が良く分かりません。
もっと勉強しないとだめですね。

お礼日時:2010/07/09 07:09

グルーピングをスクリプトで管理すればよいのでしょうけれど、もともと備わっている機能をわざわざ作成するよりも、本来の機能に任せるほうが良さそうな気が…



>nameを商品名、valueを価格として使いたいので、~
nameをグルーピングに、valueを「商品名 価格」にすれば、小細工をしなくてもすむのでは?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

そうですね、元々ある機能を作り直すとか無謀でした。
valueを「商品名 価格」にする方法で考えてみます。

お礼日時:2010/07/09 06:35

 同じグループのラジオボタンは、同じNAME属性にしないと、


ラジオボタン(一つだけ選ばせる)の機能を持たせる事は出来ません。
 
 どのラジオボタンがチェックされたかは、nameじゃなくて、value
で判断する。価格も一緒にとりたかったら、
 value="['商品A','34500']"
見たいにして、アンシリアライズすれば、どうでしょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

そうですよね、やっぱり同じNAME属性じゃないと無理ですよね…。
valueに商品名と価格を設定して、計算するときは価格だけ、メール送るときは両方受け取る方法を考えてみます。

お礼日時:2010/07/09 06:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!