- ベストアンサー
JavaScriptで計算表についての追加質問
- No.3909621で質問した「JavaScriptで計算表」について、追加の質問です。
- AA項目をグループ分けし、CC項目と同様に表示する方法について質問します。
- DD項目もグループごとに異なる割合で計算表に反映させたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは >FF項目を2つ表示にして、 function col2() { num=0; for(i=0;i<3;i++) { if(obj3[i].value == "") { n=0; } else { n = eval(obj3[i].value); } num += n * obj4[0].value; } obj6[0].value = num; num=0; for(i=3;i<5;i++) { if(obj3[i].value == "") { n=0; } else { n = eval(obj3[i].value); } num += n * obj4[1].value; } obj6[1].value = num; } <div> <input type="text" class="FF" readonly> <input type="text" class="FF" readonly> </div> >(AA項目を選択しないとBB項目の入力不可とかできますか?) for(i=0;i<obj1.length;i++) { obj1[i].onchange = function() { able(); col1(); } } ※ ↑able(); を追加 ↓function able(){ } を新たに作る function able() { for(i=0;i<obj1.length;i++) { if(obj1[i].value != "") { obj2[i].disabled = false; } else { obj2[i].value = ""; obj2[i].disabled = true; } } } <div> <input type="text" class="BB" disabled> <input type="text" class="BB" disabled> <input type="text" class="BB" disabled> <input type="text" class="BB" disabled> <input type="text" class="BB" disabled> </div> >DD項目もCC項目にデータが表示されている場合に選択していなければエラーメッセージを表示 ※CC項目にデータ表示されればDD,EE,計算ボタンを可能にしてます function col1() { flag = 0; for(i=0;i<obj1.length;i++) { obj3[i].value = obj1[i].value * obj2[i].value; if(obj3[i].value == "0") obj3[i].value = ""; if(obj3[i].value != "") flag = 1; } obj4[0].disabled = flag==1?false:true; obj4[1].disabled = flag==1?false:true; obj5[0].disabled = flag==1?false:true; document.getElementById("colbtn").disabled = flag==1?false:true; } <select class="DD" disabled> (2ヶ所) <select class="EE" disabled> <input type="button" value="計算" id="colbtn" onclick="col2();col3();" disabled> ※それにあわせて以下を新規追加 function clears() { for(i=0;i<obj2.length;i++) { obj2[i].disabled = true; } for(i=0;i<obj4.length;i++) { obj4[i].disabled = true; } obj5[0].disabled = true; document.getElementById("colbtn").disabled = true; } <input type="reset" value="クリア" onclick="clears()"> ※onclick="clears()"を追加 >DD,EEが選択されてなければ警告を出す function col2() { num=0;flag=0; for(i=0;i<3;i++) { if(obj3[i].value == "") { n=0; } else { n = eval(obj3[i].value); flag=1;} num += n * obj4[0].value; } if(obj4[0].value == "" && flag == "1") { alert("DD(1)項目を選択してください"); num="";} if(flag == "0") num = ""; obj6[0].value = num; num=0;flag=0; for(i=3;i<5;i++) { if(obj3[i].value == "") { n=0; } else { n = eval(obj3[i].value); flag=1;} num += n * obj4[1].value; } if(obj4[1].value == "" && flag == "1") { alert("DD(2)項目を選択してください"); num="";} if(flag == "0") num = ""; obj6[1].value = num; } function col3() { m = obj5[0].selectedIndex; if(m == 0) { alert("EE項目を選択してください"); return false; } total = 0; for(i=0;i<3;i++) { n = obj1[i].selectedIndex; val = EEs[m][n]; nums = obj1[i].value * obj2[i].value * obj4[0].value * val; total += nums; } total = total==0?"":total; obj7[0].value = total; total = 0; for(i=3;i<5;i++) { n = obj1[i].selectedIndex; val = EEs[m][n]; nums = obj1[i].value * obj2[i].value * obj4[1].value * val; total += nums; } total = total==0?"":total; obj7[1].value = total; }
その他の回答 (1)
- leap_day
- ベストアンサー率60% (338/561)
こんにちは DD項目を2つに増やして前回#5の下側のfunction col3(){ }を 1~3をD(1)の割合でかけて4,5をD(2)の割合で掛けるということですか? function col3() { m = obj5[0].selectedIndex; total = 0; for(i=0;i<3;i++) { n = obj1[i].selectedIndex; val = EEs[m][n]; nums = obj1[i].value * obj2[i].value * obj4[0].value * val; total += nums; } obj7[0].value = total; total = 0; for(i=3;i<5;i++) { n = obj1[i].selectedIndex; val = EEs[m][n]; nums = obj1[i].value * obj2[i].value * obj4[1].value * val; total += nums; } obj7[1].value = total; } <div> <select class="DD"> <option value="">選択</option> <option value="0.2">2割</option> <option value="0.3">3割</option> <option value="0.4">4割</option> <option value="0.5">5割</option> <option value="0.6">6割</option> <option value="0.7">7割</option> <option value="0.8">8割</option> </select> <select class="DD"> <option value="">選択</option> <option value="0.2">2割</option> <option value="0.3">3割</option> <option value="0.4">4割</option> <option value="0.5">5割</option> <option value="0.6">6割</option> <option value="0.7">7割</option> <option value="0.8">8割</option> </select> </div> 補足にあったようにGGは1つで表示するのであれば obj7[0].value = total; を削除して 2個目の total = 0; を削除 obj7[1].value = total; を obj7[0].value = total; に変更してください
補足
leap_dayさん ありがとうございます。 何度もお答え頂いて大変恐縮しております。 FF項目を2つ表示にして、 FF(1)には、「AA1」グループのCC(1)の合計×DD(1)の結果表示 FF(2)には、「AA2」グループのCC(2)の合計×DD(2)の結果表示 とできますでしょうか? それと ・AA(1)グループかAA(2)グループのいずれか1つでも選択、ユーザ入力(BB項目)をしないとエラーメッセージを表示 (AA項目を選択しないとBB項目の入力不可とかできますか?) ・DD項目もCC項目にデータが表示されている場合に選択していなければエラーメッセージを表示 というのはできますか? 何度も色々、お尋ねして大変申し訳ありませんが、宜しくお願い致します。
お礼
leap_dayさん 思い描いている計算式が出来ました! 拙い説明で分かりづらい部分や度重なる質問に丁寧にお答え頂きまして大変感謝しています。 本当にありがとうございました。大変助かりました。 また、ご教授願うことがあるときは、宜しくお願い致します。 今回は、ありがとうございました。