[jQuery] Re: Binding a unique single and double click command

2009-10-07 Thread Sam

Thanks for the help! I nailed it with the following:

 $('.todo_item h2').live('click', function() {
clicks++;
x = $(this);
if (clicks == 1) singleClick = setTimeout(function() { clicks
= 0; showExtra(x); }, 300);
if (clicks == 2) { clearTimeout(singleClick); clicks = 0;
editInPlace(x); };

});


[jQuery] Re: Binding a unique single and double click command

2009-09-30 Thread readysalted


I'd use this approach -

var clicks = 0;

$('.todo_item h2').live('click', function() {
// count the click
click++;

// only set the timeout if the first click to prevent multiple
firing
if( click == 1) setTimeout( doTheAction(), 300);
});

function doTheAction()
{
 if(click == 1) editInPlace();
 if(click == 2) showExtra();

 // reset click
 click = 0;
}

so you will only do something after the timeout fires, and you count
the clicks. If the user clicks a 2nd time before the timeout fires
you'll get the 2nd action. If not, you get the first.

NB: not tested, just an idea. Test it hard to make sure you don't
create lots of timeouts and crash the browser :)


On Sep 29, 3:41 pm, Sam samueljhart...@gmail.com wrote:
 I'm trying to write some jQuery to do the following:

 If a user clicks once on an object, do X.

 If a user clicks twice on an object, do Y, but not X.

 I've been having some trouble with this as, obviously, a double-click
 will trigger the single-click twice. Here is a failed attempt:

     $('.todo_item h2').live('click', function() {
         var startTime = new Date();
         $(this).mousedown(function() {
             var endTime = new Date();
             if (Math.abs(endTime - startTime)  300) { editInPlace }
             else { showExtra }
         });

 });

 where editInPlace and showExtra are some functions I have defined
 elsewhere in the document. This method, however, relies on a second
 click, or mousedown at least, to work, which fails if the user only
 clicks once.

 I have also looked into setTimeout but without any fruitful results.
 Anyone have any suggestions on how to code thsi?


[jQuery] Re: Binding a unique single and double click command

2009-09-30 Thread Liam Potter


in the double click function you'd have to clearTimeout on the first 
function otherwise it will run anyways.


readysalted wrote:

I'd use this approach -

var clicks = 0;

$('.todo_item h2').live('click', function() {
// count the click
click++;

// only set the timeout if the first click to prevent multiple
firing
if( click == 1) setTimeout( doTheAction(), 300);
});

function doTheAction()
{
 if(click == 1) editInPlace();
 if(click == 2) showExtra();

 // reset click
 click = 0;
}

so you will only do something after the timeout fires, and you count
the clicks. If the user clicks a 2nd time before the timeout fires
you'll get the 2nd action. If not, you get the first.

NB: not tested, just an idea. Test it hard to make sure you don't
create lots of timeouts and crash the browser :)


On Sep 29, 3:41 pm, Sam samueljhart...@gmail.com wrote:
  

I'm trying to write some jQuery to do the following:

If a user clicks once on an object, do X.

If a user clicks twice on an object, do Y, but not X.

I've been having some trouble with this as, obviously, a double-click
will trigger the single-click twice. Here is a failed attempt:

$('.todo_item h2').live('click', function() {
var startTime = new Date();
$(this).mousedown(function() {
var endTime = new Date();
if (Math.abs(endTime - startTime)  300) { editInPlace }
else { showExtra }
});

});

where editInPlace and showExtra are some functions I have defined
elsewhere in the document. This method, however, relies on a second
click, or mousedown at least, to work, which fails if the user only
clicks once.

I have also looked into setTimeout but without any fruitful results.
Anyone have any suggestions on how to code thsi?