前回、「ボタンで選択されていないセレクトメニューの非反映」という質問をさせて頂いたものです。
http://oshiete.goo.ne.jp/qa/7093835.html
文章構成などは下記のHTMLをしようしているのですが…。
「蓋付きのボックス」の<ラジオボックスをチェックしなければ選択できない>はクリアできたのですが、「蓋付きバスケット」の方で迷っています。
後はこれで合計金額がきちんと出ればいいのですが…、
もうすこしお力とお時間を頂けないでしょうか?
<html>
<head>
<title>簡単見積もり表</title>
<script Language="JavaScript">
<!--
function calc()
{
n = 0;
fObj = document.myFORM;
n += eval(fObj.sel0.options[fObj.sel0.selectedIndex].value);
n += eval(fObj.sel1.options[fObj.sel1.selectedIndex].value);
for (i=0; i<3; i++) if (fObj[i].checked) n += eval(fObj[i].value);
for (i=3; i<19; i++) if (fObj[i].checked) n += eval(fObj[i].value);
fObj.result.value = n;
}
function linker(evt){
var t = evt.target || evt.srcElement;
if(t.nodeName != "INPUT" || t.type != "radio") return;
var sel, i, s;
sel = t.form.getElementsByTagName("select");
for(i=0; s=sel[i++];)
if(/(^| )linkage( |$)/.test(s.className)){
t = s.previousSibling;
while(t && (t.nodeName != "INPUT" || t.type != "radio")) t = t.previousSibling;
if(t) s.disabled = !t.checked;
}
}
// --></script>
</head>
<body>
<form name="myFORM" action="#" onclick="linker(event)">
<BR>
<b>セットの果物を一つお選び下さい</b><br>
<input type="radio" name="ch1" value="100">りんご(100円)
<input type="radio" name="ch1" value="20">バナナ(20円)
<input type="radio" name="ch1" value="200">梨(200円)
<input type="radio" name="ch1" value="250">ブドウ(250円)
<input type="radio" name="ch1" value="150" checked>みかん(150円)<br>
<BR>
<b>リボンの色をお選びください</b><br>
<input type="radio" name="ch2" value="0" checked>赤(0円)
<input type="radio" name="ch2" value="2000">青(0円)
<input type="radio" name="ch2" value="0">金(10円)<br>
<hr>
<b>バスケットの形をお選び下さい</b><br>
<INPUT type="radio" name="cover" value="1200" checked>プラスチック丸型編み込み\1200<INPUT type="checkbox"
name="bx1" value="500">素材を木に変更(+\500)<BR>
<INPUT type="radio" name="cover" value="1500">編み込み四角\1500<BR>
<INPUT type="radio" name="cover" value="1500">編み込み楕円\1500<BR>
<INPUT type="radio" name="cover" value="1000">蓋なしボックスレインボー1000円<br>
<INPUT type="radio" name="cover" value="covered"><b>蓋付きのボックス</b>
色によって値段が変化します<br>
<select class="linkage" name="color_of_cover" disabled>
<OPTION value="0" selected>色を選択</OPTION>
<OPTION value="39900">赤1000円</OPTION>
<OPTION value="52500">青1000円</OPTION>
<OPTION value="54600">金1100円</OPTION>
</select><BR>
<INPUT type="radio" name="cover" value="0"><b>蓋付きバスケット</b>
形によって値段が変化します<BR>
<select name="sel1">
<OPTION value="0" selected>形を選択</OPTION>
<OPTION value="1500">丸 1500円</OPTION>
<OPTION value="1600">四角 1600円</OPTION>
<OPTION value="1600">楕円 1600円</OPTION>
</select>
<br><hr><BR>
<b>ご希望のオプションがあれば選択して下さい。(複数選択可)</b><BR>
<INPUT type="checkbox" name="bx1" value="300">クッション材\300
<INPUT type="checkbox" name="bx1" value="200">飾り\200<BR>
<INPUT type="checkbox" name="bx1" value="150">メッセージカード\150
<INPUT type="checkbox" name="bx1" value="2500">花束\2,500<BR>
<BR>
<hr>
<input type="button" value="合計を出す" onClick="calc()"><br>
合計<input type="text" name="result"><br>
</form>
</body>
</html>
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
前回回答者です。
>「蓋付きバスケット」の方で迷っています。
『迷っています。』の意味がわかりかねるのですが、「どんなふうにしようか」迷っているのか、「やろうかやるまいか」迷っているのか、あるいは全く別のことで迷っているのか…
よくわかりませんけれど、もしかして「同じことをやりたい」という意味なのでしたら、前回回答にも書いてありますように
<select class="linkage" name="sel1" disabled>
でいけるはずです。
disabledにしているので、「色を選択してください」の選択肢は必要ではないように思いますが…?
>後はこれで合計金額がきちんと出ればいいのですが…、
あれっ、そっちもですか…
今、時間がとれないのでそれは後ほど。
No.2
- 回答日時:
いぬまに ^^;
Array: filter, map, reduce をつかってます
<!DOCTYPE html>
<html lang="ja">
<head>
<title>簡単見積もり表</title>
<style type="text/css">
fieldset {
margin-bottom :1em;
}
fieldset > p {
margin : 0;
}
</style>
</head>
<body>
<form>
<fieldset>
<legend>セットの果物を一つお選び下さい</legend>
<input type="radio" name="ch1" value="100">りんご(100円)
<input type="radio" name="ch1" value="20">バナナ(20円)
<input type="radio" name="ch1" value="200">梨(200円)
<input type="radio" name="ch1" value="250">ブドウ(250円)
<input type="radio" name="ch1" value="150" checked>みかん(150円)
</fieldset>
<fieldset>
<legend>リボンの色をお選びください</legend>
<input type="radio" name="ch2" value="0" checked>赤(0円)
<input type="radio" name="ch2" value="2000">青(2000円)
<input type="radio" name="ch2" value="10">金(10円)
</fieldset>
<fieldset>
<legend>バスケットの形をお選び下さい</legend>
<p>
<input type="radio" name="cover" value="1200" checked>プラスチック丸型編み込み\1200
<input type="checkbox" name="bx1" value="500">素材を木に変更(+\500)
<p>
<input type="radio" name="cover" value="1500">編み込み四角\1500
<p>
<input type="radio" name="cover" value="1500">編み込み楕円\1500
<p>
<input type="radio" name="cover" value="1000">蓋なしボックスレインボー1000円
<p>
<input type="radio" name="cover" value="0">
<b>蓋付きのボックス</b>色によって値段が変化します<br>
<select name="sel1" disabled>
<option value="39900" selected>赤1000円
<option value="52500">青1000円
<option value="54600">金1100円
</select>
<p>
<input type="radio" name="cover" value="0">
<b>蓋付きバスケット</b>形によって値段が変化します<br>
<select name="sel2" disabled>
<option value="1500" selected>丸 1500円
<option value="1600">四角 1600円
<option value="1600">楕円 1600円
</select>
</fieldset>
<fieldset>
<legend>ご希望のオプションがあれば選択して下さい。(複数選択可)</legend>
<input type="checkbox" name="bx1" value="300">クッション材\300
<input type="checkbox" name="bx1" value="200">飾り\200
<input type="checkbox" name="bx1" value="150">メッセージカード\150
<input type="checkbox" name="bx1" value="2500">花束\2,500
</fieldset>
<p>
<input type="button" value="合計を出す">
合計 <input type="text" name="result">
</p>
</form>
<script>
function add (result, num) {
return result + num;
}
function toNumber (e) {
return isNaN (e.value) ? 0: Number (e.value);
}
function isChecked (node) {
return node.checked;
}
function isRadio (node) {
return ('radio' === node.type);
}
function setDisabled (node) {
node.disabled = this.disabled;
}
function withDisabled (node) {
var p = node.parentNode;
if ('P' === p.nodeName)
getDescendant.call (this, p).forEach (setDisabled, { disabled: !node.checked });
}
function getDescendant (parent) {
switch (parent.nodeName) {
case 'INPUT' : case 'SELECT' : case 'TEXTAREA' :
return (this.name === parent.name) ? []: [parent];
default :
return (parent.hasChildNodes ())
? Array.prototype.concat.apply ([],
Array.prototype.map.call (parent.childNodes, arguments.callee, this))
: [];
}
}
function calc (event) {
var total = 0;
var target = event.target || event.srcElement;
var es = target.form.elements;
var ary = Array.prototype.concat.call ([],
Array.prototype.filter.call (es['ch1'], isChecked),
Array.prototype.filter.call (es['ch2'], isChecked),
Array.prototype.filter.call (es['bx1'], isChecked),
Array.prototype.filter.call (es['cover'], isChecked));
if (! es['sel1'].disabled)
ary.push (es['sel1']);
if (! es['sel2'].disabled)
ary.push (es['sel2']);
es['result'].value = ary.map (toNumber).reduce (add, 0);
}
function handler (event) {
var e = event.target || event.srcElement;
if (e.value === '合計を出す')
return calc (event);
if (isRadio (e))
Array.prototype.filter.call (e.form.elements[e.name], isRadio).forEach (withDisabled, e);
}
document./*@cc_on @if(1) attachEvent( 'on'+ @else@*/ addEventListener(/*@end@*/
'click', handler, false);
</script>
No.3
- 回答日時:
#1です。
反応がないので、よくわからないままですが、勝手に同様のことをやりたいのだと解釈して回答しています。
全体像の意図がいまいちわからないところもありますが、そこも勝手に、解釈しています。
例えば、『素材を木に変更』の項目も同様と解釈しています。
前回のようにselect要素を初期値でdisabledにしておくと、スクリプトオフのユーザは入力できなくなってしまうので、オフの場合は連動の制御や合計の計算はできないけれど入力は可能になるように変えました。
金額の計算については、サーバ側で再度ロジックチェックをして算出するのがよろしいかと思います。
体裁その他はいい加減なので、ご調製を。
(全角空白は半角に)
(No2様が良い回答をくださっていることと思いますが(内容確認中なので内容不明)、とりあえずご参考までに)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>sample</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<style type="text/css">
<!--
form { width:45em; }
form fieldset { margin-bottom:1em; padding:0.5em; }
form legend { font-weight:bold; }
form fieldset input, form fieldset select { margin-left:1em; }
//-->
</style>
<script type="text/javascript">
<!--
(function(){
var linker = function(form){
var i, e, t, elm = form.elements;
for(i=0; e=elm[i++];)
if(/(^| )linked( |$)/.test(e.className)){
t = e.previousSibling;
while(t && (t.nodeName != "INPUT" || t.type != "radio"))
t = t.previousSibling;
if(t) e.disabled = !t.checked;
}
}
var calc = function(form){
var i, e, tag, val;
var total = 0, elm = form.elements;
for(i=0; e=elm[i++];){
val = e.value;
tag = e.nodeName;
if(((tag=="INPUT" && e.checked) || tag=="SELECT") && !e.disabled)
total += isNaN(val)?0:parseInt(val);
}
form.elements["result"].value = total;
}
/*@cc_on@*/
var handler = function(evt){
var t = evt./*@if(1)srcElement@else@*/target/*@end@*/;
if(t.nodeName == "INPUT"){
var f = t.form;
if(f.name == "myFORM"){
if(t.type == "radio") linker(f);
else
if(t.type == "button" && t.name == "total") calc(f);
}
}
}
window./*@if(1)attachEvent('on'+ @else@*/addEventListener(/*@end@*/
'load', function(){ linker(document.forms["myFORM"]); }, false);
document./*@if(1)attachEvent('on'+ @else@*/addEventListener(/*@end@*/
'click', handler, false);
})();
// -->
</script>
</head>
<body>
<form name="myFORM" action="#">
<fieldset>
<legend>セットの果物を一つお選び下さい</legend>
<input type="radio" name="ch1" value="100">りんご(100円)
<input type="radio" name="ch1" value="20">バナナ(20円)
<input type="radio" name="ch1" value="200">梨(200円)
<input type="radio" name="ch1" value="250">ブドウ(250円)
<input type="radio" name="ch1" value="150" checked>みかん(150円)
</fieldset>
<fieldset>
<legend>リボンの色をお選びください</legend>
<input type="radio" name="ch2" value="0" checked>赤(0円)
<input type="radio" name="ch2" value="0">青(0円)
<input type="radio" name="ch2" value="10">金(10円)
</fieldset>
<fieldset>
<legend>バスケットの形をお選び下さい</legend>
<input type="radio" name="cover" value="1200" checked>プラスチック丸型編み込み(1200円)
<input class="linked" type="checkbox" name="bx1" value="500">素材を木に変更(+500円)<br>
<input type="radio" name="cover" value="1500">編み込み四角(1500円)<br>
<input type="radio" name="cover" value="1500">編み込み楕円(1500円)<br>
<input type="radio" name="cover" value="1000">蓋なしボックスレインボー(1000円)<br>
<input type="radio" name="cover" value="covered">蓋付きのボックス(色によって値段が変化します)
<select class="linked" name="color_of_cover">
<option value="1000">赤 1000円</option>
<option value="1000">青 1000円</option>
<option value="1100">金 1100円</option>
</select><br>
<input type="radio" name="cover" value="0">蓋付きバスケット(形によって値段が変化します)
<select class="linked" name="sel1">
<option value="1500"> 丸 1500円</option>
<option value="1600">四角 1600円</option>
<option value="1600">楕円 1600円</option>
</select>
</fieldset>
<fieldset>
<legend>ご希望のオプションがあれば選択して下さい。(複数選択可)</legend>
<input type="checkbox" name="bx1" value="300">クッション材(300円)
<input type="checkbox" name="bx1" value="200">飾り(200円)<br>
<input type="checkbox" name="bx1" value="150">メッセージカード(150円)
<input type="checkbox" name="bx1" value="2500">花束(2,500円)
</fieldset>
<div>
<input type="button" name="total" value="合計を出す">
合計<input type="text" name="result" readonly>円
</div>
</form>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
チェックされたラジオボタンに...
-
ラジオボタンにタブインデック...
-
Pythonで会員サイトの自動ログ...
-
現在時刻を取得してフォームのs...
-
テキストボックスに入力された...
-
フォームの一部をPOSTで送信で...
-
this.formがundefined
-
正規表現で複数マッチ条件で悩...
-
複数のフォームを一括で自動送...
-
Selenium.ChromeDriverの使い方...
-
クリックさせたいが、click()が...
-
【掲示板の機能】投稿時にサイ...
-
追加ボタンを押した際に ok ボ...
-
クリック→フォーカスのある場所...
-
カレンダーの年月日の横に翌月...
-
フォームで入力した値を別のフ...
-
Javascript checkboxの入力チェ...
-
Imageオブジェクトを使って赤か...
-
【jQuery】tableループ内のIDの...
-
onchangeイベントを強制的に発...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ラジオボタンのチェックが外れ...
-
javascript作成してます。ラジ...
-
ラジオボタンにタブインデック...
-
Jvasvriptのlengthで個数が取得...
-
ホームページ作成について。
-
データベースの値を判断してラ...
-
フォームPOST後「戻る」時のチ...
-
ラジオボタンでdisabledとchecked
-
Form内のselectを連動させるに...
-
チェックされたラジオボタンに...
-
アンダーバーのname値は取得で...
-
ラジオボタンのリセット方法
-
jQueryで複数のラジオボタンを処理
-
ラジオボタンの分岐方法に関して
-
javascriptによる動的なリンク...
-
radio選択をクッキーに保存させ...
-
jQuery 変数の使い方について
-
ラジオボタンでチェックした項...
-
チェックボックスとテキストボ...
-
JavaScriptでラジオボタンのチ...
おすすめ情報