git.asbjorn.biz
/
jquery.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added a new .stop() method which stops all animations running on the matched set...
[jquery.git]
/
src
/
event
/
event.js
diff --git
a/src/event/event.js
b/src/event/event.js
index
9dff1b2
..
6224d13
100644
(file)
--- a/
src/event/event.js
+++ b/
src/event/event.js
@@
-12,14
+12,14
@@
jQuery.event = {
// around, causing it to be cloned in the process
if ( jQuery.browser.msie && element.setInterval != undefined )
element = window;
// around, causing it to be cloned in the process
if ( jQuery.browser.msie && element.setInterval != undefined )
element = window;
-
+
// Make sure that the function being executed has a unique ID
if ( !handler.guid )
handler.guid = this.guid++;
// if data is passed, bind to handler
if( data != undefined ) {
// Make sure that the function being executed has a unique ID
if ( !handler.guid )
handler.guid = this.guid++;
// if data is passed, bind to handler
if( data != undefined ) {
- // Create temporary function pointer to original handler
+ // Create temporary function pointer to original handler
var fn = handler;
// Create unique handler function, wrapped around original handler
var fn = handler;
// Create unique handler function, wrapped around original handler
@@
-35,6
+35,11
@@
jQuery.event = {
handler.guid = fn.guid;
}
handler.guid = fn.guid;
}
+ // Namespaced event handlers
+ var parts = type.split(".");
+ type = parts[0];
+ handler.type = parts[1];
+
// Init the element's event structure
if (!element.$events)
element.$events = {};
// Init the element's event structure
if (!element.$events)
element.$events = {};
@@
-82,6
+87,12
@@
jQuery.event = {
remove: function(element, type, handler) {
var events = element.$events, ret, index;
remove: function(element, type, handler) {
var events = element.$events, ret, index;
+ // Namespaced event handlers
+ if ( typeof type == "string" ) {
+ var parts = type.split(".");
+ type = parts[0];
+ }
+
if ( events ) {
// type is actually an event object here
if ( type && type.type ) {
if ( events ) {
// type is actually an event object here
if ( type && type.type ) {
@@
-101,7
+112,9
@@
jQuery.event = {
// remove all handlers for the given type
else
for ( handler in element.$events[type] )
// remove all handlers for the given type
else
for ( handler in element.$events[type] )
- delete events[type][handler];
+ // Handle the removal of namespaced events
+ if ( !parts[1] || events[type][handler].type == parts[1] )
+ delete events[type][handler];
// remove generic event handler if no more handlers exist
for ( ret in events[type] ) break;
// remove generic event handler if no more handlers exist
for ( ret in events[type] ) break;
@@
-122,7
+135,7
@@
jQuery.event = {
}
},
}
},
- trigger: function(type, data, element) {
+ trigger: function(type, data, element, native, extra) {
// Clone the incoming data, if any
data = jQuery.makeArray(data || []);
// Clone the incoming data, if any
data = jQuery.makeArray(data || []);
@@
-134,10
+147,13
@@
jQuery.event = {
// Handle triggering a single element
} else {
// Handle triggering a single element
} else {
- var val, ret, fn = jQuery.isFunction( element[ type ] || null );
+ var val, ret, fn = jQuery.isFunction( element[ type ] || null ),
+ // Check to see if we need to provide a fake event, or not
+ evt = !data[0] || !data[0].preventDefault;
// Pass along a fake event
// Pass along a fake event
- data.unshift( this.fix({ type: type, target: element }) );
+ if ( evt )
+ data.unshift( this.fix({ type: type, target: element }) );
// Trigger the event
if ( jQuery.isFunction( element.$handle ) )
// Trigger the event
if ( jQuery.isFunction( element.$handle ) )
@@
-147,8
+163,16
@@
jQuery.event = {
if ( !fn && element["on"+type] && element["on"+type].apply( element, data ) === false )
val = false;
if ( !fn && element["on"+type] && element["on"+type].apply( element, data ) === false )
val = false;
+ // Extra functions don't get the custom event object
+ if ( evt )
+ data.shift();
+
+ // Handle triggering of extra function
+ if ( extra && extra.apply( element, data ) === false )
+ val = false;
+
// Trigger the native events (except for clicks on links)
// Trigger the native events (except for clicks on links)
- if ( fn && val !== false && !(jQuery.nodeName(element, 'a') && type == "click") ) {
+ if ( fn && native !== false && val !== false && !(jQuery.nodeName(element, 'a') && type == "click") ) {
this.triggered = true;
element[ type ]();
}
this.triggered = true;
element[ type ]();
}
@@
-166,6
+190,10
@@
jQuery.event = {
// Empty object is for triggered events with no data
event = jQuery.event.fix( event || window.event || {} );
// Empty object is for triggered events with no data
event = jQuery.event.fix( event || window.event || {} );
+ // Namespaced event handlers
+ var parts = event.type.split(".");
+ event.type = parts[0];
+
var c = this.$events && this.$events[event.type], args = Array.prototype.slice.call( arguments, 1 );
args.unshift( event );
var c = this.$events && this.$events[event.type], args = Array.prototype.slice.call( arguments, 1 );
args.unshift( event );
@@
-175,14
+203,17
@@
jQuery.event = {
args[0].handler = c[j];
args[0].data = c[j].data;
args[0].handler = c[j];
args[0].data = c[j].data;
- var tmp = c[j].apply( this, args );
+ // Filter the functions by class
+ if ( !parts[1] || c[j].type == parts[1] ) {
+ var tmp = c[j].apply( this, args );
- if ( val !== false )
- val = tmp;
+ if ( val !== false )
+ val = tmp;
- if ( tmp === false ) {
- event.preventDefault();
- event.stopPropagation();
+ if ( tmp === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
}
}
}
}
@@
-412,12
+443,17
@@
jQuery.fn.extend({
* @param Array data (optional) Additional data to pass as arguments (after the event object) to the event handler
* @cat Events
*/
* @param Array data (optional) Additional data to pass as arguments (after the event object) to the event handler
* @cat Events
*/
- trigger: function( type, data ) {
+ trigger: function( type, data, fn ) {
return this.each(function(){
return this.each(function(){
- jQuery.event.trigger( type, data, this );
+ jQuery.event.trigger( type, data, this, true, fn );
});
},
});
},
+ triggerHandler: function( type, data, fn ) {
+ if ( this[0] )
+ return jQuery.event.trigger( type, data, this[0], false, fn );
+ },
+
/**
* Toggle between two function calls every other click.
* Whenever a matched element is clicked, the first specified function
/**
* Toggle between two function calls every other click.
* Whenever a matched element is clicked, the first specified function
@@
-966,7
+1002,7
@@
function bindReady(){
// script does not exist if jQuery is loaded dynamically
if ( script )
script.onreadystatechange = function() {
// script does not exist if jQuery is loaded dynamically
if ( script )
script.onreadystatechange = function() {
- if ( document.readyState != "complete" ) return;
+ if ( this.readyState != "complete" ) return;
jQuery.ready();
};
jQuery.ready();
};