X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fevent.js;h=a38013067101e42f1641070a790d332da325b976;hb=01e8f33e44b8ee4aa61b48d60cfcae34ac12fcf1;hp=9922e021914db3a7361a547fc33ad0c80ca94084;hpb=e6a481e533dc25ecf4d25123d6515c61a97a7f19;p=jquery.git diff --git a/src/event.js b/src/event.js index 9922e02..a380130 100644 --- a/src/event.js +++ b/src/event.js @@ -8,6 +8,9 @@ jQuery.event = { // Bind an event to an element // Original by Dean Edwards add: function(element, type, handler, data) { + if ( element.nodeType == 3 || element.nodeType == 8 ) + return; + // For whatever reason, IE has trouble passing the window object // around, causing it to be cloned in the process if ( jQuery.browser.msie && element.setInterval != undefined ) @@ -19,7 +22,7 @@ jQuery.event = { // 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 @@ -83,6 +86,10 @@ jQuery.event = { // Detach an event or set of events from an element remove: function(element, type, handler) { + // don't do events on text and comment nodes + if ( element.nodeType == 3 || element.nodeType == 8 ) + return; + var events = jQuery.data(element, "events"), ret, index; // Namespaced event handlers @@ -147,6 +154,10 @@ jQuery.event = { // Handle triggering a single element } else { + // don't do events on text and comment nodes + if ( element.nodeType == 3 || element.nodeType == 8 ) + return; + var val, ret, fn = jQuery.isFunction( element[ type ] || null ), // Check to see if we need to provide a fake event, or not event = !data[0] || !data[0].preventDefault; @@ -171,13 +182,21 @@ jQuery.event = { data.shift(); // Handle triggering of extra function - if ( extra && extra.apply( element, data ) === false ) - val = false; + if ( extra ) { + // call the extra function and tack the current return value on the end for possible inspection + var ret = extra.apply( element, data.concat( val ) ); + // if anything is returned, give it precedence and have it overwrite the previous value + if (ret !== undefined) + val = ret; + } // Trigger the native events (except for clicks on links) if ( fn && donative !== false && val !== false && !(jQuery.nodeName(element, 'a') && type == "click") ) { this.triggered = true; - element[ type ](); + try { + element[ type ](); + // prevent IE from throwing an error for some hidden elements + } catch (e) {} } this.triggered = false; @@ -268,7 +287,7 @@ jQuery.event = { if ( event.pageX == null && event.clientX != null ) { var doc = document.documentElement, body = document.body; event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0); - event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0); } // Add which for key events @@ -333,7 +352,7 @@ jQuery.fn.extend({ event.preventDefault(); // and execute the function - return args[this.lastToggle].apply( this, [event] ) || false; + return args[this.lastToggle].apply( this, arguments ) || false; }); }, @@ -348,7 +367,8 @@ jQuery.fn.extend({ while ( parent && parent != this ) try { parent = parent.parentNode; } catch(error) { parent = this; }; // If we actually just moused on to a sub-element, ignore it - if ( parent == this ) return false; + if ( parent == this ) + return true; // Execute the right function return (event.type == "mouseover" ? fnOver : fnOut).apply(this, [event]); @@ -431,7 +451,7 @@ function bindReady(){ // If Safari or IE is used // Continually check to see if the document is ready - if (jQuery.browser.msie || jQuery.browser.safari ) (function(){ + if (jQuery.browser.msie || jQuery.browser.safari ) (function(){ try { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/