平成30/ 2018-10-23 19:47
HTML link submit 連続 防止 /2016.6.1

--------------------------------------------------------------------------------------------------------------------------
以下は便利。
----
<script type="text/javascript">
var submitf=0;
window.onload = function(){
  var i,m;

  // 全リンクのクリックイベントを submittableObject_Click で取得する。
  for (i = 0; i < document.links.length; i ++) {
        // document.links[i].onclick = submittableObject_Click;

        document.links[i].onclick = function(){
            if( !submitf){
                submitf=1;
                location.href=document.links[i].href;
            }
        }
  }
    for(var i=0;i<document.getElementsByTagName("input").length;i++){
        if(
            document.getElementsByTagName("input")[i].type == 'button' ||
            document.getElementsByTagName("input")[i].type == 'submit' ||
            document.getElementsByTagName("input")[i].type == 'reset'
        ){
// class で情報の受け渡し(引数のような使い方)できそう

            //document.getElementsByTagName('input')[i].onclick = function(){ alert(document.getElementsByTagName("input")[i].name); return false; }
            document.getElementsByTagName('input')[i].onclick = function(){
                //alert(this.name);
                if( !submitf){
                    submitf=1;
                    //if(this.type=='submit' && (this.name == 'cfm_x' || this.name == 'fin_x' || this.name=='mod_x')){
                    if(this.type=='submit'){
                        //this.form.submit();
                        return true;

                    } else if( this.name == 'c_x'){
                        location.href='/c/';
                    } else if( this.name == 'contract_file_x'){
                        location.href='/c/contract_file/';

                    } else if( this.type == 'button' && this.name == 'mod_x'){
                        location.href='usr_entry.html?usr_id=<?php echo h($_['usr_id']); ?>';
                    } else if( this.name == 'detail_x'){
                        location.href='usr_detail.html?usr_id=<?php echo h($_['usr_id']); ?>';
                    } else if( this.name =='contract_x'){
                        location.href='/c/contract_file/?usr_id=<?php echo URL::encode($_['usr_id']); ?>';

                    } else if( this.name =='contract_add_x'){
                        location.href='usr_insurance_entry.html?usr_id=<?php echo URL::encode($_['usr_id']); ?>';

                    } else if( m = this.name.match(/^contract_detail([0-9]+)_x$/)){
                        location.href='usr_insurance_detail.html?id='+m[1];

                    } else if( m = this.name.match(/^contract_entry([0-9]+)_x$/)){
                        location.href=$('#contract_entry_url_'+m[1]).val();
                    } else{

                        return false;
                    }
                } else{
                    return false;
                }
            }
//            document.getElementsByTagName('input')[i].onclick = submittableObject_Click;
        }
    }
    return true;
}





--------------------------------------------------------------------------------------------------------------------------
以下はダメだった。
----
// window の Load イベントを取得する。
window.onload = window_Load;

function window_Load() {
  var i;

  // 全リンクのクリックイベントを submittableObject_Click で取得する。
  for (i = 0; i < document.links.length; i ++) {
    document.links[i].onclick = submittableObject_Click;
  }

  // 全ボタンのクリックイベントを submittableObject_Click で取得する。
  for (i = 0; i < document.forms[0].elements.length; i ++) {
    if (document.forms[0].elements[i].type == "button" ||
      document.forms[0].elements[i].type == "submit" ||
      document.forms[0].elements[i].type == "reset") {
      document.forms[0].elements[i].onclick = submittableObject_Click;
    }
  }

  return true;
}

function submittableObject_Click() {
  if (isDocumentLoading()) {
    alert("処理中です…");
    return false;
  }

  return true;
}

function isDocumentLoading() {
  return (document.readyState != null &&
          document.readyState != "complete");
}


----
【ASP.NET】リンクボタンの二度押し防止 - QA@IT
http://qa.atmarkit.co.jp/q/1401



--------------------------------------------------------------------------------------------------------------------------
<form method="post" onsubmit="this.onsubmit=function(){return false;};">


--------------------------------------------------------------------------------------------------------------------------
<form action="./" method="post" onsubmit="this.onsubmit=function(){return false;};">
-
上記のようにすると、ボタン連打を防げる

しかし、aタグの場合は有効にならない。
<a href="javascript:void(0)" onclick="document.fm.submit();return false;" />

その場合は以下のようにすればいい。
-
<script type="text/javascript">
var submitf=0; // submitとしないこと(jqueryに submit関数があり、Safariでエラーでる)
</script>

<a href="javascript:void(0)" onclick="if(!submitf){document.fm.submit();submitf=1;}return false;" />




>> Thanks.
form送信時に二度押しを防止するJavascriptです。
http://www.ahref.org/doc/hinagata/nidoosi.html

html フォーム送信制御
http://www38.atwiki.jp/fieds_labo1/?cmd=word&word=onsubmit%20this.onsubmit%20function%20return%20false&type=normal&page=html-%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E9%80%81%E4%BF%A1%E5%88%B6%E5%BE%A1


javascript js stop continue succession successive duplication button