I always seem to read about closures when my brain is fried at the end of the day. I can't seem to get my head around the concept :)
Thanks for the help - I'll read more tomorrow. Blair Mitchelmore-2 wrote: > > Well first off, my plugin's code can be found at > <http://jquery.offput.ca/js/jquery.every.js> but I haven't yet set up a > page which explains the plug-in's capabilities and I haven't optimised > the code or really debugged it as I wrote it on a lark a while ago and > haven't put much thought to it since. So after all these disclaimers I > suggest you use it with caution. In fact, I've taken the liberty of > re-writing my previous code with regular setTimeouts... > > Example: > var timer; > var fn = function(e) { > if (e && e.type == 'blur') { > if (timer) > window.clearTimeout(timer); > } > // Do stuff > } > $(whatever).blur(fn).keyup(function() { > timer = window.setTimeout(fn,2000); > }).keydown(function() { > if (timer) window.clearTimeout(timer); > }); > > This previous example also takes advantage of another feature you > require: closures. The basic idea behind closures is that you can create > an anonymous function which takes advantage of data currently in scope > even if not existence in the scope the function is ultimately called. > You see this when I create the timer variable and then use it inside the > fn function I created. Any variables in scope when you define your > function can be accessed later on by that function. It's one of the > coolest and most powerful features of JavaScript. Hope all that helped. > > -blair > > Daemach wrote: >> Would you mind posting a link to your timer plugin? >> >> If I'm going to use an external function I will need to pass additional >> parameters. How do you force passing the event type along with extra >> data? >> I'm newish to javascript... >> >> >> >> Blair Mitchelmore-2 wrote: >>> It might be better if you didn't use an anonymous function so you could >>> reference it multiple times. (I'm going to use a plugin I wrote that >>> jQuerizizes timer events cause it really simplifies the syntax of the >>> solution but something equivalent could be done without it.) >>> >>> Example: >>> var fn = function(e) { >>> if (e.type == 'blur') $(this).stop(); >>> // Do stuff >>> } >>> $(whatever).blur(fn).keyup(function() { >>> $(this).once(2000,fn); >>> }).keydown(function() { >>> $(this).stop(); >>> }); >>> >>> Hope that helps. >>> >>> -blair >>> >>> Daemach wrote: >>>> I have a form with which I want to do ajax updates as they type. If >>>> they >>>> stop typing for more than 2 seconds it should update the field. If the >>>> field blurs before the 2 seconds are up it should update the field. >>>> >>>> I have the ajax side of it worked out, and currently the updates work >>>> properly when the field blurs. I just need some ideas on how to write >>>> the >>>> timer function for the keypresses and how it integrates with the blur >>>> function so the function doesn't get called twice and so there are no >>>> memory >>>> leaks from timers set then abandoned because the blur event got to it >>>> first. >>>> >>>> I'm going for elegance here :) I could write an outside function that >>>> gets >>>> called from both event handlers but that seems cheezy. There must be a >>>> way >>>> to do this with an anonymous function... >>> >>> _______________________________________________ >>> jQuery mailing list >>> [email protected] >>> http://jquery.com/discuss/ >>> >>> >> > > > _______________________________________________ > jQuery mailing list > [email protected] > http://jquery.com/discuss/ > > -- View this message in context: http://www.nabble.com/Gmail-style-updates-tf3269331.html#a9093056 Sent from the JQuery mailing list archive at Nabble.com. _______________________________________________ jQuery mailing list [email protected] http://jquery.com/discuss/
