フォームsubmit時にフォーム部品をdisableにする

下記エントリをちょっと改造して作ってみた。そして
http://d.hatena.ne.jp/faerie/20050805#1123218492

送信ボタンを押した後に、しいたけ等で送信を中止すると困ったことになる。リロードすれば送信できるようになるが、そうすると入力内容も消えてしまう。

だから、ボタンを押してしばらくしたら disabled を解除してやるといい。

というすばらしい配慮が載ってたので、それも盛り込んでみた。

 var types = [
     "text",
     "password",
     "radio",
     "checkbox",
     "textarea",
     "select-one",
     "select-multiple",
     "button",
     "submit",
     "reset",
     ""
 ];
     
 function disabledAllElements() {
     activeFormElements(true);
 }
 function enabledAllElements() {
     activeFormElements(false);
 }

 function attachOnSubmit() {
     for (var i = 0; i < document.forms.length; ++i) {
         document.forms[i].onsubmit = disabledAllElements;
     }
 }

 function activeFormElements(disabled) {
     for (var i = 0; i < document.forms.length; i++) {
         var elements = document.forms[i].elements;
         for (var j = 0; j < elements.length; j++) {
             var e = elements[j];
             if (types.join().indexOf(e.type + ',') != -1) {
                 e.disabled = disabled;
                 if (disabled) {
                     setTimeout(enabledAllElements, 3000);
                 }
             }
         }
     }
 }

 window.attachEvent("onload", attachOnSubmit);

submitされてから3秒後にフォーム部品のdisabledが元に戻ります。このサンプルだとフォーム部品全てがdisabledになってしまうので、submitボタンだけでいいよ!という場合は、先頭の配列の中身を"submit"だけにすればOKです。

下記エントリ同様クロスブラウザを考えるならaddEventListenerとattachEventを使い分ける処理が必要だと思いますけど、このサンプルはIEでのみ検証しました。