フォーム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でのみ検証しました。