2009-06-09 20 views
12
$('.ajax').click 
(  
    function() 
    { 
     // If been bound then we need to return here. 
     alert(':D'); 
    } 
) 

$('.ajax').click 
(
    function() 
    { 
     // If been bound then we need to return here. 
     alert(':D'); 
    } 
) 

En este caso, he llamado al código duplicado. ¿Cómo puedo detectar si el evento ha estado destinado a evitar que active dos cuadros de alerta?Cómo evitar que los eventos se vinculen varias veces

Respuesta

22

Hay una forma realmente buena de hacerlo en jQuery.

Aquí hay un ejemplo.

function alertEvent() { 
    alert(":D"); 
} 
$(".ajax").bind("click", alertEvent); 
//When you want to ensure it won't happen twice... 
$(".ajax").unbind("click", alertEvent); 
$(".ajax").bind("click", alertEvent); 

Este método solo eliminará el evento que especifique, lo que lo hace ideal para lo que desea hacer.

+0

¿Cómo se pueden pasar los argumentos de clic e con eso? ¿Puedo ir $ (". Ajax"). Bind ("click", alertEvent (e)); ? –

+0

define la función como "función alertEvent (e)" para obtener el argumento del evento. – mcrumley

6

tratar compromiso.Por antes de la unión:

$(".ajax").unbind("click").click( 
     function() { 
    alert("Hello"); 
    }); 

leer this de algo más de información.

+0

Esto desvincular todos los eventos de clic, no sólo el evento especificado. He agregado un ejemplo que solo desvinculará el evento que no desea duplicar, lo que significa que otros eventos continuarán activados. – Fenton

15

Si usa jQuery> = 1.7 puede usar .on()/.off() API junto con un espacio de nombres de eventos. En este ejemplo .off() se llama de inmediato para garantizar eventos anteriores (de cualquier tipo) con el espacio de nombres son un-atado:

$("form") 
    .off(".validator") 
    .on("keypress.validator", "input[type='text']", validate); 

Es una API bastante flexible para que pueda ser muy específico si necesita ser:

$("form") 
    .off("keypress.validator", "input[type='text']", validate) 
    .on("keypress.validator", "input[type='text']", validate); 

Los documentos: http://api.jquery.com/off/

0
function demo() 
{ 
// your code here which will called on click event 
} 

$(document).ready(function(){ 
$('.add').bind('click',demo); 

}); 

//After successfully ajax call response 
//Unbind the click event first 
$('.add').unbind('click',demo); 
//Then again bind the event 
$('.add').bind('click',demo); 
0

solución más simple de aquí bind event only once

copiado ejemplo de código:

function someMethod() 
{ 
    $(obj).off('click').on('click', function(e) { 
     // put your logic in here 
    }); 
} 
Cuestiones relacionadas