Quick passes:

jQuery.delay = function(callback, delay) {
        var timeout;
        return function() {
                clearTimeout(timeout);
                timeout = setTimeout(callback, delay);
        }
}

jQuery.throttle = function(callback, delay) {
        var prev = new Date().getTime() - delay;
        return function() {
                var now = new Date().getTime();
                if (now - prev > delay) {
                        prev = now;
                        callback.call();
                }
        }
}


On Mar 27, 11:38 pm, oliver <[email protected]> wrote:
> I agree that this is a common use case, and also that it would be
> better implemented as an optional parameter to ajax rather than a
> wholly separate method.
>
> I find I also use similar code within animations, so perhaps the code
> could be implemented in such a way as to also be exposed as a utility
> function.
>
> Perhaps: $.delay(function, delay) - returns a function handler which
> can be called many times, but the registered function will only fire
> once, [delay] milliseconds after the last time it was called.  The
> innards of the function would be mostly as Miloš has above.
>
> A potentially useful corollary might be: $.throttle(function, delay) -
> returns a function handler which could be called as many times as
> desired, but the registered function would only fire every [delay]
> millis at most.
>
> Names are just off the top of my head, of course.
>
> oliver
>
> On Mar 27, 3:27 pm, Daniel Friesen <[email protected]> wrote:
>
>
>
> > Rather than an entire other function, what about just a {delay: ms} to .ajax
>
> > ~Daniel Friesen (Dantman, Nadir-Seen-Fire)
>
> > Miloš Rašić wrote:
> > > Here's a suggestion for a feature that I think would be useful to AJAX
> > > developers. Sometimes, we need an AJAX feature that could allow a user
> > > to cause a large number of consequent AJAX requests, for example in
> > > auto-complete for searches (like Google Suggest) or filter forms that
> > > submit whenever something is changed in them. In a case like this,
> > > especially when the user has a slow internet connection, we have no
> > > way of knowing if the AJAX responses will arrive in the same order as
> > > the requests were sent. A solution to this is to wait for some time to
> > > make sure that the user has stopped manipulating the controls that
> > > cause AJAX requests before sending a request. At the moment, I do it
> > > like this:
>
> > >    function submit_filter() {
> > >            $('#item_list').html('loading...');
> > >            $.post('some url',$('#filter').serialize(),function(data) {
> > >                    $('#item_list').html(data);
> > >            });
> > >            return false;
> > >    }
>
> > >    $('.ajax_control').change(function() {
> > >            clearTimeout(ajaxTimeout);
> > >            ajaxTimeout = setTimeout(submit_filter,2000);
> > >    });
>
> > > Basically, whenever a control is changed a timeout for ajax request is
> > > reset to 2 seconds. A request is sent only when a user changes
> > > something an hasn't made new changes last 2 seconds.
>
> > > Since this is a frequent use case, it would be great if there would be
> > > a $.post_delayed() function which would have additional 2 parameters:
> > > an id, which would be used to identify related controls, and a time
> > > interval to wait before submitting the request.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to