// Init the element's event structure
var events = jQuery.data( elem, "events" ) || jQuery.data( elem, "events", {} ),
- handle = jQuery.data( elem, "handle" ) || jQuery.data( elem, "handle", function() {
+ handle = jQuery.data( elem, "handle" ) || jQuery.data( elem, "handle", function eventHandle() {
// Handle the second event of a trigger and when
// an event is called after a page has unloaded
return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
- jQuery.event.handle.apply( arguments.callee.elem, arguments ) :
+ jQuery.event.handle.apply( eventHandle.elem, arguments ) :
undefined;
});
// Add elem as a property of the handle function
special: {
ready: {
// Make sure the ready event is setup
- setup: bindReady,
+ setup: jQuery.bindReady,
teardown: function() {}
},
});
// submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
jQuery.event.special.submit = {
setup: function( data, namespaces, fn ) {
- if ( !jQuery.support.submitBubbles && this.nodeName.toLowerCase() !== "form" ) {
+ if ( this.nodeName.toLowerCase() !== "form" ) {
jQuery.event.add(this, "click.specialSubmit." + fn.guid, function( e ) {
var elem = e.target, type = elem.type;
}
});
}
-
- return false;
},
remove: function( namespaces, fn ) {
}
};
+}
+
// change delegation, happens here so we have bind.
+if ( !jQuery.support.changeBubbles ) {
+
jQuery.event.special.change = {
filters: {
click: function( e ) {
}
},
setup: function( data, namespaces, fn ) {
- // return false if we bubble
- if ( !jQuery.support.changeBubbles ) {
- for ( var type in changeFilters ) {
- jQuery.event.add( this, type + ".specialChange." + fn.guid, changeFilters[type] );
- }
+ for ( var type in changeFilters ) {
+ jQuery.event.add( this, type + ".specialChange." + fn.guid, changeFilters[type] );
}
// always want to listen for change for trigger
return false;
},
remove: function( namespaces, fn ) {
- if ( !jQuery.support.changeBubbles ) {
- for ( var type in changeFilters ) {
- jQuery.event.remove( this, type + ".specialChange" + (fn ? "."+fn.guid : ""), changeFilters[type] );
- }
+ for ( var type in changeFilters ) {
+ jQuery.event.remove( this, type + ".specialChange" + (fn ? "."+fn.guid : ""), changeFilters[type] );
}
}
};
var changeFilters = jQuery.event.special.change.filters;
+}
+
function trigger( type, elem, args ) {
args[0].type = type;
return jQuery.event.handle.apply( elem, args );
}
// Create "bubbling" focus and blur events
-jQuery.each({
- focus: "focusin",
- blur: "focusout"
-}, function( orig, fix ){
- var event = jQuery.event,
- handle = event.handle;
-
- function ieHandler() {
- arguments[0].type = orig;
- return handle.apply(this, arguments);
- }
+if ( !jQuery.support.focusBubbles ) {
- event.special[orig] = {
- setup:function() {
- if ( this.addEventListener ) {
- this.addEventListener( orig, handle, true );
- } else {
- event.add( this, fix, ieHandler );
- }
+jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ){
+ event.special[ orig ] = {
+ setup: function() {
+ jQuery.event.add( this, fix, ieHandler );
},
- teardown:function() {
- if ( this.removeEventListener ) {
- this.removeEventListener( orig, handle, true );
- } else {
- event.remove( this, fix, ieHandler );
- }
+ teardown: function() {
+ jQuery.event.remove( this, fix, ieHandler );
}
};
+
+ function ieHandler() {
+ arguments[0].type = orig;
+ return jQuery.event.handle.apply(this, arguments);
+ }
});
+}
+
jQuery.fn.extend({
// TODO: make bind(), unbind() and one() DRY!
bind: function( type, data, fn, thisObject ) {
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
},
- ready: function( fn ) {
- // Attach the listeners
- bindReady();
-
- // If the DOM is already ready
- if ( jQuery.isReady ) {
- // Execute the function immediately
- fn.call( document, jQuery );
-
- // Otherwise, remember the function for later
- } else {
- // Add the function to the wait list
- jQuery.readyList.push( fn );
- }
-
- return this;
- },
-
live: function( type, data, fn, thisObject ) {
if ( jQuery.isFunction( data ) ) {
if ( fn !== undefined ) {
.replace(/ /g, "|")].join(".");
}
-jQuery.extend({
- isReady: false,
- readyList: [],
- // Handle when the DOM is ready
- ready: function() {
- // Make sure that the DOM is not already loaded
- if ( !jQuery.isReady ) {
- if ( !document.body ) {
- return setTimeout( jQuery.ready, 13 );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If there are functions bound, to execute
- if ( jQuery.readyList ) {
- // Execute all of them
- var fn, i = 0;
- while ( (fn = jQuery.readyList[ i++ ]) ) {
- fn.call( document, jQuery );
- }
-
- // Reset the list of functions
- jQuery.readyList = null;
- }
-
- // Trigger any bound ready events
- jQuery( document ).triggerHandler( "ready" );
- }
- }
-});
-
-var readyBound = false;
-
-function bindReady() {
- if ( readyBound ) { return; }
- readyBound = true;
-
- // Catch cases where $(document).ready() is called after the
- // browser event has already occurred.
- if ( document.readyState === "complete" ) {
- return jQuery.ready();
- }
-
- // Mozilla, Opera and webkit nightlies currently support this event
- if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", function() {
- document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
- jQuery.ready();
- }, false );
-
- // If IE event model is used
- } else if ( document.attachEvent ) {
- // ensure firing before onload,
- // maybe late but safe also for iframes
- document.attachEvent("onreadystatechange", function() {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( document.readyState === "complete" ) {
- document.detachEvent( "onreadystatechange", arguments.callee );
- jQuery.ready();
- }
- });
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var toplevel = false;
-
- try {
- toplevel = window.frameElement == null;
- } catch(e){}
-
- if ( document.documentElement.doScroll && toplevel ) {
- (function() {
- if ( jQuery.isReady ) {
- return;
- }
-
- try {
- // If IE is used, use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- document.documentElement.doScroll("left");
- } catch( error ) {
- setTimeout( arguments.callee, 0 );
- return;
- }
-
- // and execute any waiting functions
- jQuery.ready();
- })();
- }
- }
-
- // A fallback to window.onload, that will always work
- jQuery.event.add( window, "load", jQuery.ready );
-}
-
jQuery.each( ("blur focus load resize scroll unload click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup error").split(" "), function( i, name ) {