Commit 990c094f authored by Dave Methvin's avatar Dave Methvin Committed by timmywil

special.handle now must call the handleObj.handler if it wants that to happen....

special.handle now must call the handleObj.handler if it wants that to happen. Also re-use the simulate() function for bubbling focusin.
parent 6a670df9
...@@ -565,21 +565,19 @@ function dispatch( target, event, handlers, args ) { ...@@ -565,21 +565,19 @@ function dispatch( target, event, handlers, args ) {
// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
if ( !specialHandle || specialHandle.call( target, event, handleObj ) === false ) { // Pass in a reference to the handler function itself
// Pass in a reference to the handler function itself // So that we can later remove it
// So that we can later remove it event.handler = handleObj.handler;
event.handler = handleObj.handler; event.data = handleObj.data;
event.data = handleObj.data; event.handleObj = handleObj;
event.handleObj = handleObj;
ret = (specialHandle || handleObj.handler).apply( target, args );
ret = handleObj.handler.apply( target, args );
if ( ret !== undefined ) {
if ( ret !== undefined ) { event.result = ret;
event.result = ret; if ( ret === false ) {
if ( ret === false ) { event.preventDefault();
event.preventDefault(); event.stopPropagation();
event.stopPropagation();
}
} }
} }
} }
...@@ -702,20 +700,24 @@ jQuery.each({ ...@@ -702,20 +700,24 @@ jQuery.each({
delegateType: fix, delegateType: fix,
bindType: fix, bindType: fix,
handle: function( event, handleObj ) { handle: function( event ) {
var target = this, var target = this,
related = event.relatedTarget, related = event.relatedTarget,
selector = handleObj.selector; handleObj = event.handleObj,
selector = handleObj.selector,
oldType, ret;
if ( selector && related ) { if ( selector && related ) {
// Delegated event; find the real relatedTarget // Delegated event; find the real relatedTarget
related = jQuery( related ).closest( selector )[0]; related = jQuery( related ).closest( selector )[0];
} }
if ( !related || related !== target && !jQuery.contains( target, related ) ) { if ( !related || related !== target && !jQuery.contains( target, related ) ) {
//TODO: don't clobber event.type permanently oldType = event.type;
event.type = handleObj.origType; event.type = handleObj.origType;
return false; ret = handleObj.handler.apply( this, arguments );
event.type = oldType;
} }
return ret;
} }
}; };
}); });
...@@ -907,16 +909,8 @@ if ( !jQuery.support.focusinBubbles ) { ...@@ -907,16 +909,8 @@ if ( !jQuery.support.focusinBubbles ) {
} }
}; };
function handler( donor ) { function handler( event ) {
// Donor event is always a native one; fix it and switch its type. simulate( fix, jQuery.event.fix( event ), event.target, true );
// Let focusin/out handler cancel the donor focus/blur event.
var e = jQuery.event.fix( donor );
e.type = fix;
e.originalEvent = {};
jQuery.event.trigger( e, null, e.target );
if ( e.isDefaultPrevented() ) {
donor.preventDefault();
}
} }
}); });
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment