• 締切済み

答えを○か×か表示するソースを教えて下さい。

JavaScript初心者で、3択問題を作成しています。 問題文や、採点、解答(解説)のソースは記述で来たのですが、クイズに答えてくれた方に問題の正誤が分かりやすいように、正解した問題文の枠の色が青になったり、枠の横に「○」が表示されるようにしたいと考えています。 質問が分かりにくくてすみません!どうか回答をよろしくお願いします! <html> <head> <title>問題3</title> <script language="JavaScript"> <!-- var msg1,msg2,msg3,msg4,msg5,msg6,msg7,msg8,msg9,msg10; function MakeArray(n){this.Length=n;} var cont=new MakeArray(11); function KUIZU1(fm,nn){msg1=fm.value;cont[1]=nn;} function KUIZU2(fm,nn){msg2=fm.value;cont[2]=nn;} function KUIZU3(fm,nn){msg3=fm.value;cont[3]=nn;} function KUIZU4(fm,nn){msg4=fm.value;cont[4]=nn;} function KUIZU5(fm,nn){msg5=fm.value;cont[5]=nn;} function KUIZU6(fm,nn){msg6=fm.value;cont[6]=nn;} function KUIZU7(fm,nn){msg7=fm.value;cont[7]=nn;} function KUIZU8(fm,nn){msg8=fm.value;cont[8]=nn;} function KUIZU9(fm,nn){msg9=fm.value;cont[9]=nn;} function KUIZU10(fm,nn){msg10=fm.value;cont[10]=nn;} function SUM(fm){n1=0; for (i=1;i<11;i++){ n1=n1+cont[i];} if (isNaN(n1)) {alert("入力されてない項目があります。");}else false; fm.answer1.value=n1; } function disp(){document.MyForm.Result.value="第一問:"+msg1+"\n"+"第二問:"+msg2+"\n"+"第三問:"+msg3+"\n"+"第四問:"+msg4+"\n"+"第五問:"+msg5+"\n"+"第六問:"+msg6+"\n"+"第七問:"+msg7+"\n"+"第八問:"+msg8+"\n"+"第九問:"+msg9+"\n"+"第十問:"+msg10; } //--> </script> </head> <body bgcolor="ivory"> <form name="timer"> <input type="text" value="">分 <input type="text" value="">秒<br> <input type="button" value="スタート" onclick="Start()"> <input type="button" value="ストップ" onclick="Stop()"> <input type="button" value="クリア" onclick="ReSet()"> </form> <center> <span>問題3</span> <hr> <h2>ヒント付きテスト (択一問題×10 各1点)</h2> </center> <table border=4> <form method="POST"><tr><td> 1.Microsoft社が開発した表計算ソフトの名前は?<br> </td><td> <input type="radio" name="back" value="不正解(パワーポイント(PowerPoint)は、会議や発表用のスライドを作成する時に使います。)" onClick="KUIZU1(this,0)">パワーポイント<br> </td><td> <input type="radio" name="back" value="不正解(ワード(Word)は、報告書やレポートの文書を作成する時に使います。)" onClick="KUIZU1(this,0)">ワード<BR> </td><td> <input type="radio" name="back" value="正解(正解)" onClick="KUIZU1(this,1)">エクセル<BR> </td><td> <input type="button" value="ヒント" span onClick="document.all.item('moji1').style.visibility='visible'"></span> <div ID="moji1" style="visibility:hidden;">この教材で学習しているのは?</div> </td></tr> </form><form method="POST"> <tr><td> 2.Excelで出来ることは?<br> </td><td> <input type="radio" name="back" value="不正解(Wordの解説。)" onClick="KUIZU2(this,0)">報告書や原稿の文書を作成すること<br> </td><td> <input type="radio" name="back" value="不正解(PowerPointの解説。)" onClick="KUIZU2(this,0)">プレゼンテーション用のスライドを作成すること<BR> </td><td> <input type="radio" name="back" value="正解(正解)" onClick="KUIZU2(this,1)">作成した表の数値からグラフを作成すること<BR> </td><td> <input type="button" value="ヒント" span onClick="document.all.item('moji2').style.visibility='visible'"></span> <div ID="moji2" style="visibility:hidden;"></div> </td></tr> </form><form method="POST"> <tr><td> 10.開いているExcelのファイル名はどこに表示されている?<br> </td><td> <input type="radio" name="back" value="不正解(操作対象となっているセルの位置や、名前を表示しています。。)" onClick="KUIZU10(this,0)">名前ボックス<br> </td><td> <input type="radio" name="back" value="不正解(ワークシートの見出しです。)" onClick="KUIZU10(this,0)">シート見出し<br> </td><td> <input type="radio" name="back" VALUE="正解(正解)" onClick="KUIZU10(this,1)">タイトルバー<br> </td><td> <input type="button" value="ヒント" span onClick="document.all.item('moji10').style.visibility='visible'"></span> <div ID="moji10" style="visibility:hidden;">ヒント</div> </td></tr> </form><form method="POST"><tr><td> </table> </form> <form method="POST" name="MyForm"> 確認の上,採点ボタンを押して下さい。<br> <input type="button" value="採点" onClick="SUM(this.form)"><br> <input type="text" size=6 name="answer1">点<br> 解答ボタンを押して下さい。解答がでます。<br> <input type="button" value="解答" onClick="disp()"><br> <textarea name="Result" rows=10 cols=100></textarea><br> </form> </body> </html>

みんなの回答

回答No.3

ていせい。 document.addEventListener('click', function (event) {   var e = event.target;   var n;    に。 ごめん。

回答No.2

ぐだぐだになってしまった。ごめんなさい。さんこうにもならないね。 ぜんかくくうはくは、はんかくで、かなりあたらしいぶらうざで! <!DOCTYPE html> <html lang="ja"> <head>  <title>問題3</title>  <meta charset="utf-8">  <title>MyNote</title>    <style> body {  background : ivory; } table {  border : 4px gray solid; } td, th {  border:1px gray solid; } tbody td:last-of-type {  text-decoration: underline;  cursor :pointer;  white-space: nowrap; }  </style> </head> <body>  <h1>問題3</h1>  <form id="hoge" onsubmit="return false">   <table>    <caption>ヒント付きテスト (択一問題×10 各1点)</caption>    <thead>     <tr>      <th>問題      <th colspan="3">回答      <th>正誤      <th>ヒント    </thead>        <tbody>     <tr>      <th>Microsoft社が開発した表計算ソフトの名前は?      <td>パワーポイント      <td>ワード      <td>エクセル      <td>&nbsp;      <td>ヒント          <tr>      <th>Excelで出来ることは?      <td>報告書や原稿の文書を作成すること      <td>プレゼンテーション用のスライドを作成すること      <td>作成した表の数値からグラフを作成すること      <td>&nbsp;      <td>ヒント        </tbody>   </table>  </form>      <form id="huga">   <p>    確認の上,採点ボタンを押して下さい。   <p>    <input type="button" value="採点"><br>    <input type="text" size="6" name="answer">点   <p>    <input type="button" value="解答"><br>    <textarea name="result" rows="10" cols="100">解答ボタンを押して下さい。解答がでます。</textarea>  </form> <script> function getp(a,b,c){return a?c==a[b]?a:arguments.callee(a.parentNode,b,c):null}; var Answer = [  {   'answer' : 2,   'aid' : [    '不正解(パワーポイント(PowerPoint)は、会議や発表用のスライドを作成する時に使います。)',    '不正解(ワード(Word)は、報告書やレポートの文書を作成する時に使います。)',    '正解(正解)'   ],   'hint' : '似たようなものでマルチプランというのもありました'  },  {   'answer' : 2,   'aid' : [    '不正解(Wordの解説。)',    '不正解(PowerPointの解説。)',    '正解(正解)'   ],   'hint' : 'この教材で学習しているのは?'  } ]; (function () {  var doc = document;  var tbody = doc.querySelector ('#hoge tbody');  var radio = doc.createElement ('input');    radio.type = 'radio';    Array.prototype.forEach.call (tbody.rows, function (row, i) {   var cell = row.cells;   radio.name = 'Qu_' + i;      radio.value = '0';   cell[1].insertBefore (radio.cloneNode (false), cell[1].firstChild);   radio.value = '1';   cell[2].insertBefore (radio.cloneNode (false), cell[2].firstChild);   radio.value = '2';   cell[3].insertBefore (radio.cloneNode (false), cell[3].firstChild);  });    this.saiten = function () {   var point = 0;   Array.prototype.map.call (tbody.rows, function (row, i) {    var radio = row.querySelector ('input[type="radio"]:checked');    if (! radio)     return alert ('選択されていない項目' + (i+1) + 'があります');    point += +(radio.value === String (Answer[i].answer));   });   doc.querySelector ('#huga input[name="answer"]').value = point;  };      this.kaitou = function () {   var mess = [];   Array.prototype.map.call (tbody.rows, function (row, i) {    var radio = row.querySelector ('input[type="radio"]:checked');    if (! radio)     return alert ('選択されていない項目' + (i+1) + 'があります');    if (radio.value === String (Answer[i].answer)) {     row.cells[4].firstChild.nodeValue="●";     row.cells[1+Answer[i].answer].style.border = '2px blue solid';    } else {     row.cells[4].firstChild.nodeValue="";     row.cells[1+Answer[i].answer].style.border = '1px gray solid';    }    mess.push ('第'+ (1+i) + '問:' + Answer[i].aid[Number (radio.value)]);   });   doc.querySelector ('#huga textarea[name="result"]').value = mess.join ('\n');  }; })(); function Goto (v) {  if ('採点' === v)   saiten ();  else if ('解答' === v)   kaitou (); } document.addEventListener('click', function (event) {   var e = event./*@if (1) srcElement @else@*/ target /*@end@*/;   var n;      if ('TD' === e.nodeName && getp (e, 'id', 'hoge')) {    n = e.cellIndex;    if (5 == n) {     alert (Answer[e.parentNode.rowIndex-1].hint);    }   }   else if ('INPUT' === e.nodeName) Goto (e.value);  }, false); </script> </body> うっ! もじすうせいげんがきつい!

回答No.1

こんにちは。おいそぎでなければ、HTMLのぶんぽうちぇっかーがあります。それをためしましょう。 あなたなら、100点とれるとおもいます。 Another HTML-lint gateway http://openlab.ring.gr.jp/k16/htmllint/htmllint.html <table>のすぐしたに<form>があるなんてまちがいです。

Chausaito
質問者

補足

回答ありがとうございます。参考サイト様でチェックしていただいた所、<table>にSUMMARY 属性を指定した方が良いとのことで99点でした。 画像は変更していませんが、ご指摘通りに<form>タグを消しました。<tr><td>タグも一緒に消していたため、枠が消えてしまうことに気がつきました。ありがとうございます。 現在も試行錯誤しているのですが、解答した問題の正誤(○×ないし色がつく)が表示できません。 javascript解説サイト様を参考に作っていますが、なかなか上手くいかないですね…。