Blair, This is a great idea, thanks. So when you say stop being lazy, am I to take it that there is not a webpage with examples? :)
On 8/13/07, Blair Mitchelmore <[EMAIL PROTECTED]> wrote: > > > So I actually wrote this plugin almost six months ago, but a few weeks > ago I fleshed it out for use at work. The main external change was a > change in the order of the arguments to simplify the code. And the > main internal change was moving the structure of the timer tracking > code to more closely mimic jQuery's internal event module. There > wasn't anything wrong with the way it was written before, but this > way, the code will appear more friendly for people trying to hack it > in the future who are already familiar with hacking jQuery. > > Anyways, the main point of this code is concise definitions of > interval-ed events. For a practical example: > > $("input").keypress(function() { > $(this).stop("autocomplete").once(250,"autocomplete",function() { > // provide a list of values to autocomplete with > }); > }); > > For another practical, though slightly more trivial, example: > > $('p.clock').every(1000, function() { > this.innerHTML = // The time right.... now. > }); > > The example will "do something" after someone has typed something but > only if no keys have been pressed for 250 milliseconds. This allows > for dynamic type searching without complicated timing and clearing of > timeouts in your code. The second example is a simple clock. The > implementation may vary, but the principle is the same. One additional > feature is the concept of labels. Labels allow you to define certain > events to be in a certain namespace which can be more finely > controlled. In this way, the above autocomplete example could operate > on the same element while another timer sequence is occuring and > because they have different labels, they could be stopped and > controlled independent of each other without any complicated global > variable nonsense. > > The level of control of stopping events employs labels. Calling $ > (this).stop() cancels any and all interval and timeout events attached > to that element. $(this).stop('label') will stop any and all events > with the label 'label' and $(this).stop('label',fn) will only stop a > certain event if it is of that label name and calls the provided > function. This allows for both broad and fine-grained event control. > > So, as per usual, I've left the documentation fairly sparse and this > post will probably have to suffice until I stop being lazy. > > The functions I've added to jQuery are once, every, and stop. > > once takes three arguments: timeout, label, and function. label is > optional and will become a string representation of the timeout if not > specified. It will be called once in timeout milliseconds. > > every takes four arguments: timeout, label, function, and times. label > is again options and defaults to the timeout value. times is also > optional and becomes unbounded if unspecified. times is used to limit > the number of times an event occurs. > > stop takes two arguments: label, and function. Both are optional and > if neither is provided, all events on that DOM element are stopped. If > the label is provided without a function all events with that label > are stopped. Conversely, if a function is provided but no label, all > the events calling that function, regardless of label, are stopped. > Finally, if both are provided, they are both used to filter down to > stop that event. > > The few times I've used these methods, my timer based methods have > become invariably more readable and more compact. Enjoy, if you must. > > -blair > > -- Benjamin Sterling http://www.KenzoMedia.com http://www.KenzoHosting.com