JavaScript で記述する2重サブミット防止

今更であるが、時代遅れの Webシステムのサーバーサイドに対応するために。。。

formutil.js とでも名付けて
<script type="text/javascript" src="../js/formutil.js"></script>

------------- formutil.js の内容 ----------------

/**
 * @returns confirm実行メッセージ
 * 必要に応じてオーバーライドする。
 */

function getConfirmMessage(){
   return "送信してよろしいですか?";
}
/**
 * 入力バリデーションチェック処理
 * 必要に応じてオーバーライドする。
 * @returns Boolean true=フォーム送信可能
 */

function validation(){
   return true;
}
/**
 * confirm有り onsubmit実行
 * 例)
 * <form  onsubmit="return shouldOnSubmitConfirm(id, '送信中...')" >
 * @param id <input type="submit" の id
 * @param sendingValue 省略可、送信中 <input type="submit" の value
 * @returns Boolean
 */

function shouldOnSubmitConfirm(id, sendingValue){
   document.getElementById(id).disabled = true;
   if (!validation()){
      document.getElementById(id).disabled = false;
      return false;
   }
   var orgvalue = document.getElementById(id).value;
   if (sendingValue != null){
      document.getElementById(id).value = sendingValue;
   }
   if (confirm(getConfirmMessage())){
      return true;
   }
   document.getElementById(id).value = orgvalue;
   document.getElementById(id).disabled = false;
   return false;
}
/**
 * confirm無し onsubmit実行
 * 例)
 * <form  onsubmit="return shouldOnSubmit(id, '送信中...')" >
 * @param id <input type="submit" の id
 * @param sendingValue 省略可、送信中 <input type="submit" の value
 * @returns Boolean
 */

function shouldOnSubmit(id, sendingValue){
   document.getElementById(id).disabled = true;
   if (!validation()){
      document.getElementById(id).disabled = false;
      return false;
   }
   if (sendingValue != null){
      document.getElementById(id).value = sendingValue;
   }
   return true;
}