Yeah, but if you firebug the Event object after recursive unregister, you will see that every element that doesnt had a _prototypeEventID will create an entry in Event.cache. This is because the way the eventId is generated and THERE I'll not mess with :)
Those entry are empty, I know, but ohhh... its damn ugly. ;) P.s. agreed with the 'stopObservingNested' thing. []'s Labs 2008/10/2 puckpuck <[EMAIL PROTECTED]> > > When I made that post, I was very groggy, and realized I used a CSS > selector *, which well... is horrid slow, especially on IE. using > elem.descendants() instead would of made far more sense. > > Also I would stay away from checking on the existing of > _prototypeEventID on the element. This is an internal prototype > property, which can change at any time. Relying on such a property > can be dangerous when you attempt to do an upgrade, even a small, bug > fix one. The stopObserving method, will check the internal prototype > registry for events, which is very fast, and recommended. > > On Oct 2, 9:03 am, "Lea Hayes" <[EMAIL PROTECTED]> wrote: > > Hi puckpuck!, > > > > That's a really handy little snippet, so much simpler than manually > > enumerating nested HTML elements and stopping them individually (which > > I have previously done). > > > > If this functionality were to be bundled within the Prototype > > framework I personally think it would be better to offer an additional > > method (i.e. stopObservingNested or the like). Otherwise, the > > stopObserving method could cause undesirable effects, like if nested > > events are still wanted. > > > > Thanks! > > Lea Hayes > > > > 2008/10/2 puckpuck <[EMAIL PROTECTED]>: > > > > > > > > > This exact question was asked today at TAE. > > > > > At this time, no. stopObserving will not go through the children of > > > the container and remove events. In the future it is certainly > > > possible. Mind you it wouldn't be very difficult to write your own > > > method to recurse through all the children of a given element, and > > > call stopObserving on those children. > > > > > var elem = $("myElement"); > > > elem.stopObserving() > > > elem.select("*").invoke("stopObserving"); > > > > > On Oct 1, 11:02 am, "labs2.0" <[EMAIL PROTECTED]> wrote: > > >> Hi. Please, would you be kind to clearify this to me: if I call > > >> "Event.stopObserving(myWindow)", beeing 'myWindow' a div (ajax > > >> generated window wich can came and go as the user will), who doesnt > > >> have observers, but its a container (and parent) for many other > > >> elements (components) that may does, may doesn't have observers, will > > >> this call work recursivelly? If dont, why??? > > > > >> Assuming it doesnt, and that prototype beautifully make things in a > > >> clean and natural way, should'nt we espect some behaviour like that? I > > >> mean, in a large framework, where I create a window with many comps, > > >> one could say that its my job to create a event garbage collector > > >> (which I did hacking prototype 1.5.0) to clean up things when, say, a > > >> window pops out, but then again, if I already have a nice way to setup > > >> events, its ask too much to have a nice one to get rid off of all of > > >> them too? :) > > > > >> In prototype 1.5.0 I've hacked a "Event.observeFor(container, element, > > >> event)" and a " Event.unloadContainer(container);" for memory sake. > > > > >> Am I missing something new (and cool) about Events here? > > > > >> Thank you and let me be +1 to say that prototype ROCKS!! > > > > >> []'s > > >> Labs > > > > >> On 10 set, 09:38, "T.J. Crowder" <[EMAIL PROTECTED]> wrote: > > > > >> > Hi folks, > > > > >> > > try a look at the API documentation: > http://www.prototypejs.org/api/event/stopObserving > > >> > > (you exactly do what is wrong !!) > > > > >> > Actually, David, what she's doing is just fine. She's using a > > >> > new(ish) feature of stopObserving which appears to be missing from > the > > >> > docs. If you don't include a handler in the stopObserving call, ALL > > >> > events hooked up by observe() for the giveneventname on the given > > >> > element will be removed. This is quite handy. Even better, if you > > >> > leave off theeventname as well, stopObserving() will unhook all of > > >> > the handlers for that element [that were set up by observe()] > > >> > entirely. > > > > >> > So this would be wrong: > > > > >> > Event.observe(myelement, 'click', > > >> > this.clickHandler.bindAsEventListener(this)); > > >> > ... > > >> > Event.stopObserving(myelement, 'click', > > >> > this.clickHandler.bindAsEventListener(this)); > > > > >> > because the function arguments don't match. > > > > >> > But this is fine: > > > > >> > Event.observe(myelement, 'click', > > >> > this.clickHandler.bindAsEventListener(this)); > > >> > ... > > >> > Event.stopObserving(myelement, 'click'); > > > > >> > It removes *all* click handlers hooked using observe() from the > > >> > element. > > > > >> > And this is fine: > > > > >> > Event.observe(myelement, 'click', > > >> > this.clickHandler.bindAsEventListener(this)); > > >> > ... > > >> > Event.stopObserving(myelement); > > > > >> > It removes *all* handlers for all events hooked using observe() from > > >> > the element. Great for when you're about to remove the element. > > > > >> > I'll see if there's a doc ticket in Lighthouse for this and add one > if > > >> > there isn't. > > >> > -- > > >> > T.J. Crowder > > >> > tj / crowder software / com > > > > >> > On Sep 10, 12:14 pm, david <[EMAIL PROTECTED]> wrote: > > > > >> > > Hi Lea, > > > > >> > > try a look at the API documentation: > http://www.prototypejs.org/api/event/stopObserving > > >> > > (you exactly do what is wrong !!) > > > > >> > > Because you should do: > > > > >> > > > myTestClass.myCallback=this.clickHandler.bindAsEventListener(this); > > > > >> > > myTestClass.prototype.initEvents = function() > > >> > > { > > >> > > var myDiv1 = $('exampleDiv1'); > > >> > > myDiv1.observe('click',myTestClass.myCallback); > > > > >> > > } > > > > >> > > And to stopeventobserve: > > > > >> > > myTestClass.prototype.clearEvents = function() > > >> > > { > > >> > > var myDiv1 = $('exampleDiv1'); > > >> > > myDiv1.stopObserving('click',myTestClass.myCallback); > > > > >> > > } > > > > >> > > But we are from the original question which is if we could > > >> > > stopObserving alleventfrom one element? > > >> > > The response is NO (otherwise, let me know, it save a lot of time > and > > >> > > efforts sometime). > > > > >> > > -- > > >> > > david > > > > >> > > On Sep 2, 8:41 pm, Kruncher <[EMAIL PROTECTED]> wrote: > > > > >> > > > Hi, > > > > >> > > > I have just found out about the Prototype framework and am > somewhat > > >> > > > impressed by how much simpler it makes things. I have found that > using > > >> > > > the observe and stopObserving functions has eliminated a pretty > major > > >> > > >memoryleak within my scripts. > > > > >> > > > Below is a snippet of my code (which appears to function > correctly > > >> > > > with Prototype 1.6), but I just wanted to confirm that this is > in fact > > >> > > > correct. From the user documentation it says that the > stopObserving > > >> > > > method should be called in practically the same way as the > observe > > >> > > > method. However, I want to make sure that ALL handlers are > stopped for > > >> > > > a particulareventof a particular element. > > > > >> > > > // Called when object is initialized. > > >> > > > myTestClass.prototype.initEvents = function() > > >> > > > { > > >> > > > var myDiv1 = $('exampleDiv1'); > > >> > > > myDiv1.observe('click', > > >> > > > myTestClass.clickHandler.bindAsEventListener(this));} > > > > >> > > > // Called whenever an object is destroyed. > > >> > > > myTestClass.prototype.clearEvents = function() > > >> > > > { > > >> > > > var myDiv1 = $('exampleDiv1'); > > >> > > > myDiv1.stopObserving('click'); // Is this line > acceptable > > >> > > > to stop ALL click events for myDiv1? > > > > >> > > > } > > > > >> > > > Many thanks, > > >> > > > Lea Hayes > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Prototype & script.aculo.us" group. To post to this group, send email to prototype-scriptaculous@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~----------~----~----~----~------~----~------~--~---