二重投稿防止の履歴
jQueryプラグイン
/** * jquery.submitDisable.js * * usage: $('#yourForm').submitDisable(); $('#yourForm').submitDisable({ 'recoveryTime': 100000, 'onBeforeSubmit': function(){ alert('before'); }, 'onAfterSubmit': function(){ $('#myForm1').hide(); alert('after'); } }); * */ // IE6-8, Firefox3.5, Opera10, Safari4 (function(){ var defaultOptions = { // 送信してからdisable解除するまでのマイクロ秒。0なら解除しない 'recoveryTime': 0, // submit直前に実行するcallback 'onBeforeSubmit': null, // submit直後に別スレッド?で動作するcallback。Operaでは使えないみたい 'onAfterSubmit': null } var cancelEnter = function(e){ if (e.keyCode == 13){ return false; } }; var $ = jQuery; jQuery.fn.submitDisable = function(options){ options = jQuery.extend(defaultOptions, options); var submit = $('input[type=submit]', this); // IEはtext内でEnterすると送信できる var text = $('input[type=text]', this); // 解除する var recover = function(){ submit.attr('disabled', ''); text.unbind('keypress', cancelEnter); } // 初期化。戻った場合に実行するように。 recover(); $(this).submit(function(){ if ($.isFunction(options['onBeforeSubmit'])){ options['onBeforeSubmit'](); } submit.attr('disabled', 'disabled'); text.bind('keypress', cancelEnter); if (options['recoveryTime'] > 0){ setTimeout(recover, options['recoveryTime']); } if ($.isFunction(options['onAfterSubmit'])){ setTimeout(options['onAfterSubmit'], 1); } }); return this; } })();