フォームに入力した時のみ画面遷移時にアラート表示する方法3


HTML

<form action="index3.html" method="get">
  <input type="text" class="checkValue">
  <input type="checkbox" class="checkValue">
  <input type="radio" class="checkValue">
  <select class="checkValue">
    <option value="foo">foo</option>
    <option value="bar">bar</option>
  </select>
  <hr>
  <input type="submit" value="送信">
</form>

JavaScript

  var checkValue = document.querySelectorAll('.checkValue');
  var submitBtn = document.querySelector('input[type="submit"]');
  var checkFlag = false;
  var onBeforeunloadHandler = function(e) {
    var msg = 'このページから移動すると入力フォームの内容が消えます。';
    e.returnValue = msg;
  };
  var formAlert = function() {
    if(!checkFlag) {
      window.addEventListener('beforeunload', onBeforeunloadHandler);
      for(var i = 0; i < checkValue.length; i++) {
        checkValue[i].removeEventListener('input', formAlert);
        checkValue[i].removeEventListener('change', formAlert);
      }
      checkFlag = true;
    }
  };
  for(var i = 0; i < checkValue.length; i++) {
    checkValue[i].addEventListener('input', formAlert);
    checkValue[i].addEventListener('change', formAlert);
  }
  submitBtn.addEventListener('click', function() {
    window.removeEventListener('beforeunload', onBeforeunloadHandler);
  });