data = jQuery.makeArray(data || []);
// Handle a global trigger
- if ( !element ) {
- var g = this.global[type];
- if ( g )
- for ( var i = 0, gl = g.length; i < gl; i++ )
- this.trigger( type, data, g[i] );
+ if ( !element )
+ jQuery.each( this.global[type] || [], function(){
+ jQuery.event.trigger( type, data, this );
+ });
// Handle triggering a single element
- } else if ( element["on" + type] ) {
- if ( element[ type ] && element[ type ].constructor == Function )
- element[ type ]();
- else {
+ else {
+ var handler = element["on" + type ], val,
+ fn = jQuery.isFunction( element[ type ] );
+
+ if ( handler ) {
// Pass along a fake event
data.unshift( this.fix({ type: type, target: element }) );
// Trigger the event
- element["on" + type].apply( element, data );
+ if ( (val = handler.apply( element, data )) !== false )
+ this.triggered = true;
}
+
+ if ( fn && val !== false )
+ element[ type ]();
+
+ this.triggered = false;
}
},
handle: function(event) {
- if ( typeof jQuery == "undefined" ) return false;
+ // Handle the second event of a trigger and when
+ // an event is called after a page has unloaded
+ if ( typeof jQuery == "undefined" || jQuery.event.triggered ) return;
// Empty object is for triggered events with no data
event = jQuery.event.fix( event || window.event || {} );
event.target = event.srcElement;
// Calculate pageX/Y if missing and clientX/Y available
- if ( typeof event.pageX == "undefined" && typeof event.clientX != "undefined" ) {
+ if ( event.pageX == undefined && event.clientX != undefined ) {
var e = document.documentElement, b = document.body;
event.pageX = event.clientX + (e.scrollLeft || b.scrollLeft);
event.pageY = event.clientY + (e.scrollTop || b.scrollTop);
// If there are functions bound, to execute
if ( jQuery.readyList ) {
// Execute all of them
- for ( var i = 0; i < jQuery.readyList.length; i++ )
- jQuery.readyList[i].apply( document );
+ jQuery.each( jQuery.readyList, function(){
+ this.apply( document );
+ });
// Reset the list of functions
jQuery.readyList = null;