steveosoule
12/6/2014 - 12:24 AM

jQuery Plugin - Debounce Submit - Prevent Duplicate Form Submits

jQuery Plugin - Debounce Submit - Prevent Duplicate Form Submits

// ---- View https://github.com/steveosoule/debounceSubmit for latest version ---- //

// ---- $.fn.debounceSubmit - Prevent multiple form submits ---- //
(function($){
	$.debounceSubmit = function(el, options){
		var self = this;
		self.$el = $(el);
		self.el = el;

		self.$el.data("debounceSubmit", self);

		self.timeoutId = 0;

		self.init = function(){
			self.options = $.extend({}, $.debounceSubmit.defaultOptions, options);

			self.$el.on('submit', self.submitHandler );

			$(document).on('keydown', function(e){
				if( e.which === 27 ){
					// Enable form submit after Esc key is pressed
					self.$el.data('is-submitting', false);
				}
			})
		};

		self.submitHandler = function(e){
			var $form = $(this);
			clearTimeout(self.timeoutId);
			if( $form.data('is-submitting') ){
				if( self.options.debug ) console.log('Prevent Submit');
				e.preventDefault();
				return false;
			}
			if( self.options.debug ) console.log('Allow Submit');
			$form.data('is-submitting', true);
			self.timeoutId = setTimeout(function(){
				if( self.options.debug ) console.log('Enable Submit');
				$form.data('is-submitting', false);
			}, self.options.wait);
		};

		self.init();
	};

	$.debounceSubmit.defaultOptions = {
		wait: 750,
		debug: false
	};

	$.fn.debounceSubmit = function(options){
		return this.each(function(){
			(new $.debounceSubmit(this, options));
		});
	};

})(jQuery);