2009-04-14 26 views
20

Estoy escribiendo una pequeña extensión jQuery que impide que un usuario haga doble clic en un enlace.Detener más controladores de eventos en un elemento

$.fn.preventDoubleClick = function() { 
    return this.click(function() { 
     var $t = $(this) 
      , retVal = $t.data('active') // check the internal flag 
     ; 
     if (retVal || retVal === undefined) { // if ON... 
      $t.data('active', false); // set the internal flag to OFF 
      setTimeout(function() { 
       $t.data('active', true); 
      }, 1000); // after 1 second, set the internal flag to ON 
      console.log("allowed"); 
      return true; 
     } else { // if OFF... 
      console.log("blocked"); 
      return false; 
     } 
    }); 
}; 

el problema es que si hay otros controladores de eventos Click en los elementos, todavía fuego:

$('#myLink').click(function() { 
    console.log("Clicked"); 
}); 
$('#myLink').preventDoubleClick(); 

Y ahora cuando se hace doble clic en el enlace, me sale esto en mi registro:

permitió
hace clic
bloqueado
hace clic

Básicamente, necesito la función de clic dentro de preventDoubleClick para evitar que todos los demás controladores de eventos se activen. ¿Cómo puedo hacer esto?

+1

Además, "prevenirDoubleClick" es un nombre engañoso, después de eso no se previene -el usuario aún hace doble clic- usted simplemente bloquea que active el evento, creo ... – James

Respuesta

30

Gracias al enlace de Adam, pude ver la función que necesitaba: stopImmediatePropagation().

+1

Oh, nickf, acaba de olvidarse de aceptar su propia respuesta ... :) – brandizzi

+3

Esto también funciona sin jQuery, aquí está la documentación del estándar [stopImmediatePropagation()] (https://developer.mozilla.org/en-US/docs/Web/API/event.stopImmediatePropagation) –

6

Creo que usted está buscando event.stopPropagation

EDIT: Resulta que este no era la opción correcta para fines de Nick. Por favor, consulte his answer.

+1

La documentación en esa página dice "Tenga en cuenta que esto no evitar que se ejecuten otros controladores en el mismo elemento ". – nickf

+0

Sí, muy cierto, me alegro de que el enlace haya sido útil de todos modos =) –

Cuestiones relacionadas