JavaScriptで選択問題作成(3)

それにしても、やっちまったなぁ〜

JavaScriptで選択問題作成(3)
http://okwave.jp/qa/q9174815.html

<!DOCTYPE html>
  <meta charset="utf-8">
<style>
fieldset.q ul { list-style: none; }

</style>

<body>
<h1>問題</h1>
<fieldset class="q">
  <legend>Q1. 九州の県は次のうちどれですか?</legend>
  <ul>
    <li><label><input type="checkbox" name="q1" value="true">福岡</label>
    <li><label><input type="checkbox" name="q1" value="false">岡山</label>
    <li><label><input type="checkbox" name="q1" value="false">山形</label>
    <li><label><input type="checkbox" name="q1" value="true">長崎</label>
    <li><label><input type="checkbox" name="q1" value="true">熊本</label>
    <li><label><input type="checkbox" name="q1" value="false">新潟</label>
    <li><label><input type="checkbox" name="q1" value="false">山口</label>
    <li><label><input type="checkbox" name="q1" value="true">鹿児島</label>
    <li><label><input type="checkbox" name="q1" value="true">佐賀</label>
    <li><label><input type="checkbox" name="q1" value="false">青森</label>
    <li><label><input type="checkbox" name="q1" value="true">宮崎</label>
    <li><label><input type="checkbox" name="q1" value="false">千葉</label>

  </ul>
  <input type="button" value="解答">
  <input type="hidden" name="q1" value="">
</fieldset>

<p>
  <input type="button" value="リセット">
  <input type="button" value="終了">

<script>
function check (e) {
  var fieldset = e.parentNode;
  var hidden = fieldset.querySelector ('input[type="hidden"]');
  var seikai = fieldset.querySelectorAll ('input[type="checkbox"][value="true"]');
  var kaitou = fieldset.querySelectorAll ('input[type="checkbox"]:checked');
  var matigai = fieldset.querySelectorAll ('input[type="checkbox"][value="false"]:checked');

  if (matigai.length || kaitou.length !== seikai.length) {
    hidden.value = '';
    kotae = Array.prototype.map.call (seikai, function (e) {
      return e.parentNode.textContent;
    }).join (', ');
    alert ([
      '不正解です。',
      '答えは、'+ kotae + 'です。'
    ].join ('\n'));
  }
  else {
    hidden.value = 'true';
    alert ('正解です。');
  
  }
}

function ending () {
  var es0 = document.querySelectorAll ('fieldset.q input[type="hidden"]');
  var es1 = document.querySelectorAll ('fieldset.q input[type="hidden"][value=""]');
  alert ([
    '問題数は、'+ es0.length + 'です。',
    '間違いは、' + es1.length + '問あります。'
  ].join ('\n'));
}

function reset () {
  var es = document.querySelectorAll ('fieldset.q input[type="hidden"]');
  Array.prototype.forEach.call (es, function (e) { e.value = ''; });
}

function listener (event) {
  var e = event.target;
  
  if ('button' === e.type)
    switch (e.value) {
    case '解答' :
      check (e);
      break;
    
    case 'リセット' :
      reset ();
      break;
    
    case '終了' :
      ending ();
      break;
    }
}

reset ();
document.addEventListener ('click', listener, false);
</script>