$.fn.createPromiseEvent
http://stackoverflow.com/questions/5226376/jquery-special-event-with-deferred-is-firing-twice-on-initial-trigger
by Benjamin Lupton
HTML
<button id="first">first</button>
<button id="promise">promise</button>
<button id="second">second</button>
<button id="trigger">trigger</button>
<button id="third">third</button>
<div id="result"></div>
JavaScript
(function(window,undefined){
/**
* Creates a Promise Event
* For instance onDomReady is a promise event, all events bound to it after it's initial trigger are fired immediately
* @version 1.0.0
* @date March 08, 2011
* @package jquery-sparkle {@link http://www.balupton/projects/jquery-sparkle}
* @author Benjamin Arthur Lupton {@link http://balupton.com}
* @copyright 2011 Benjamin Arthur Lupton {@link http://balupton.com}
* @license MIT License {@link http://creativecommons.org/licenses/MIT/}
* @param {String} eventName
* @return {jQuery}
*/
$.fn.firedPromiseEvent = $.fn.firedPromiseEvent || function(eventName){
return $(this).data('defer-'+eventName+'-resolved') ? true : false;
};
/**
* Creates a Promise Event
* For instance onDomReady is a promise event, all events bound to it after it's initial trigger are fired immediately
* @version 1.0.0
* @date March 08, 2011
* @package jquery-sparkle {@link http://www.balupton/projects/jquery-sparkle}
* @author Benjamin Arthur Lupton {@link http://balupton.com}
* @copyright 2011 Benjamin Arthur Lupton {@link http://balupton.com}
* @license MIT License {@link http://creativecommons.org/licenses/MIT/}
* @param {String} eventName
* @return {jQuery}
*/
$.fn.createPromiseEvent = $.fn.createPromiseEvent || function(eventName){
// Prepare
var $this = $(this);
// Check
if ( typeof $this.data('defer-'+eventName+'-resolved') !== 'undefined' ) {
// Promise event already created
return $this;
}
$this.data('defer-'+eventName+'-resolved',false);
// Handle
var events = $.fn.createPromiseEvent.events = $.fn.createPromiseEvent.events || {
// Bind the event
bind: function(callback){
var $this = $(this);
return $this.bind(eventName,callback);
...