Could I maybe see the code? It's hard to customize something to a situation I nothing about.
-blair Daemach wrote: > OK I played around with this for a while with a fresh head. As I understand > it, the main power of closures is that they retain the environment in which > they were created. I'm not sure how that applies here, since closures have > to be defined inside of another function then returned to retain that > environment, but I'm sure it's something I'm overlooking. > > The problem with the code below is that I need to pass other variables in > addition to the event, such as the id and value of the input element that > this event handler is being registered on - how can I do this with the below > code? > > > > 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/
