二重送信防止スクリプト

Submit 後に button コントロールと input コントロールと a コントロールを無効化するための、汎用的なスクリプト
マスターページでインクルードしとくと楽。
イベントハンドラを直接設定しちゃってるので、複数のハンドラの存在を考慮する場合は要改造。
あと、サーバーサイドでもちゃんと対策しといた方がいいお。

今のトコ IE 6 と FireFox 3 のみ動作確認済み。

window.onload = 
    function()
    {
        function protect()
        {
            function disable(controls)
            {
                for (var i = 0; i < controls.length; i++)
                {
                    controls[i].disabled = true;
                }
            }
            function removeHref(controls)
            {
                for (var i = 0; i < controls.length; i++)
                {
                    controls[i].removeAttribute("href");
                }
            }
            
            disable(document.getElementsByTagName("button"));
            disable(document.getElementsByTagName("input"));
            removeHref(document.getElementsByTagName("a"));
            
            for (var i = 0; i < document.forms.length; i++)
            {
                document.forms[i].onsubmit = function() { return false; };
            }
        }
        
        for (var i = 0; i < document.forms.length; i++)
        {
            document.forms[i].onsubmit = function() { setTimeout(protect, 0); };
        }
    };