No it does not pass the test suite. I think the problem is from the bubbling in "trigger"... Any chance of getting this method added for 1.3.2? else, the "liveConvert" function moved to the jQuery namespace?
jQuery.fn.delegate = function( type, selector, fn ){ var proxy = jQuery.event.proxy( fn ); proxy.guid += selector + type; return this.bind( liveConvert( type, selector ), selector, proxy ); }; I know it is great when things "just work" but this small change allows developers in the know more control over the delegation context, and not needing to execute a selector before setting up delegation. On Feb 17, 8:37 am, John Resig <jere...@gmail.com> wrote: > Interesting work, Mike. I'll take a deeper look at it after 1.3.2 > lands. Out of curiosity - did you test this against the live tests in > the jQuery test suite? > > --John > > On Mon, Feb 16, 2009 at 6:05 PM, mike.helgeson <mike.helge...@gmail.com> > wrote: > > > - The selector must be run, before the event handler is bound... this > > seems less than ideal, if a large number of DOM elements already exist > > > - Always binds/listens to the document. My biggest hesitation with > > using live for delegation, is that there is no way to control the > > listener, it is always the document. It should at least use the jquery > > collection's context. > > > - Functionality is private... would like to expose the internal > > functions "liveConvert" and "liveHandler" to enable a plugin to > > leverage some of the features. > > > - Can't attach data to handlers the way you could using "bind" > > > - Events don't bubble correctly. Using the "closest" method seems like > > the wrong solution here... I love the method, it is quite useful, but > > in this case it causes elements to need to be sorted, and stops the > > event from bubbling the way events should > > > - Events and handlers are not cancelable... because of the way the > > liveHandler works. > > > For the benefit of those who have not looked at the code... > > "liveHandler" goes through all of the stored "live" handlers/ > > selectors, checks each handler for a matching event.type, then takes > > the event.target and searches for the closest selector match. (This > > means starting with the given element and walking up the parent tree > > and testing the selector against every element until a match is found, > > and storing the number of "parents" away the match is made) Then > > matched elements and the current handler are stored in a temp array. > > Afterwards, "liveHandler" sorts by "closest" then iterates the temp > > array to finally call each handler. This all makes terrific sense, but > > the biggest drawback for me, is that each handler is only called on > > the first matched element. > > > If I have nested divs, I would expect the "live" handler for "click" > > on selector "div" to get called twice. This is (currently) not the > > case. To try to work out some of these issues, I have created a plugin > > to try to fix most of these issues. Here is what I tried to > > accomplish: > > > 1) Exposes some of the private methods so that future plugins can > > modify things a little more easily. > > 2) Bind the event listener to the jQuery context instead of the > > document. (I think there must be a larger issue at play here) This > > also only seems to work, by setting the context with a raw DOM element > > like: $( context ).find( selector ) or $('selector',context). > > 3) "Better" bubbling/canceling... if a handler returns false, that > > handler/selector stops. if event.stopImmediatePropagation() is called, > > all handlers and selectors are stopped. > > 4) Creating a new method for setting up delegation without calling the > > selector... using "liveConvert" > > $( context ).delegate( type, selectot, handler ); > > Not sure yet about data... anyway, here is some code I have been > > working on and some very basic tests... > > >http://dev.helgeson.info/live/ > >http://dev.helgeson.info/live/$.live.js > > > I know that there is probably some issue with "position" selectors, > > but I just want to try to improve this powerful feature... --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-dev@googlegroups.com To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---