I'm sorry - it was in another thread: http://www.nabble.com/Gmail-style-updates-tf3269331.html
At the moment I'm putting the ajax call directly inside the blur event handler. It needs to pass certain attributes to make everything work - basically everything inside the data: object. Calling an outside function is fine - I just need to know how to pass an event along with the variables I have inside the function when the event is triggered. Blair Mitchelmore-2 wrote: > > 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/ > > -- View this message in context: http://www.nabble.com/Gmail-style-updates-tf3269331.html#a9108319 Sent from the JQuery mailing list archive at Nabble.com. _______________________________________________ jQuery mailing list [email protected] http://jquery.com/discuss/
