jQueryプラグイン
http://item.mindia.jp/akkun_dev/jquery.sub...
/**
* 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;
}
})();