Add .delegate() and .undelegate(). An alternative to using .live() which goes from a single root and filters by the specified selectors. Should be used like do: .delegate(td, hover, someFn);. Fixes #6005.
This commit is contained in:
parent
cb65daa399
commit
31432e048f
2 changed files with 433 additions and 38 deletions
28
src/event.js
28
src/event.js
|
@ -866,6 +866,20 @@ jQuery.fn.extend({
|
|||
|
||||
return this;
|
||||
},
|
||||
|
||||
delegate: function( selector, types, data, fn ) {
|
||||
return this.live( types, data, fn, selector );
|
||||
},
|
||||
|
||||
undelegate: function( selector, types, fn ) {
|
||||
if ( arguments.length === 0 ) {
|
||||
return this.unbind( "live" );
|
||||
|
||||
} else {
|
||||
return this.die( types, null, fn, selector );
|
||||
}
|
||||
},
|
||||
|
||||
trigger: function( type, data ) {
|
||||
return this.each(function() {
|
||||
jQuery.event.trigger( type, data, this );
|
||||
|
@ -910,8 +924,10 @@ jQuery.fn.extend({
|
|||
});
|
||||
|
||||
jQuery.each(["live", "die"], function( i, name ) {
|
||||
jQuery.fn[ name ] = function( types, data, fn ) {
|
||||
var type, i = 0;
|
||||
jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
|
||||
var type, i = 0,
|
||||
selector = origSelector || this.selector,
|
||||
context = origSelector ? this : jQuery( this.context );
|
||||
|
||||
if ( jQuery.isFunction( data ) ) {
|
||||
fn = data;
|
||||
|
@ -928,13 +944,13 @@ jQuery.each(["live", "die"], function( i, name ) {
|
|||
|
||||
if ( name === "live" ) {
|
||||
// bind live handler
|
||||
jQuery( this.context ).bind( liveConvert( type, this.selector ), {
|
||||
data: data, selector: this.selector, live: type
|
||||
context.bind( liveConvert( type, selector ), {
|
||||
data: data, selector: selector, live: type
|
||||
}, fn );
|
||||
|
||||
} else {
|
||||
// unbind live handler
|
||||
jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );
|
||||
context.unbind( liveConvert( type, selector ), fn ? { guid: fn.guid + selector + type } : null );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1002,7 +1018,7 @@ function liveHandler( event ) {
|
|||
}
|
||||
|
||||
function liveConvert( type, selector ) {
|
||||
return "live." + (type ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
|
||||
return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
|
||||
}
|
||||
|
||||
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue