views:

217

answers:

2

I have the most basic jquery function of them all, but I couldn't find a way in the documentation to trigger the contents of this click function after say 1500 milliseconds:

$('.masonryRecall').click(function(){
  $('#mainContent').masonry();
 });

P.S. just noticed the .delay function jquery 1.4, although, I am using version 1.3. I don't know whether updating this would interfere with any of the other javascript I currently have.

+5  A: 

You can do it with regular javascript using setTimeout().

$('.masonryRecall').click(function(){
        setTimeout("$('#mainContent').masonry()", 1500);
    });
Byron Whitlock
@Bryon Whitlock Thanks for that. Just to add its .masonry(). But also the timeout doesn't seem to be working. it still fires immediately???
kalpaitch
Again thanks for the direction. just another minor alteration and it works perfectly: setTimeout("$('#mainContent').masonry()", 1500);
kalpaitch
Nice catch. I updated the answer.
Byron Whitlock
+2  A: 

You should generally stay away from string literals in setTimeout/setInterval. Instead use a closure:

setTimeout(function(){ $('#mainContent').masonry(); }, 1500);`

and even better use it like this (note: the outer closure isn't really necessary):

(function($){
    var timeout=null;
    $('.masonryRecall').click(function(){
        clearTimeout(timeout);
        timeout=setTimeout(function(){$('#mainContent').masonry();}, 1500);
    });
}(jQuery));
David Murdoch