2008-09-23 9 views
7

Quiero adjuntar un evento de clic a un elemento de botón y luego eliminarlo, pero no puedo hacer que los eventos de unclick() o unbind() funcionen como se esperaba. En el siguiente código, el botón es de color 'marrón' y el evento click funciona.¿Manejo de eventos jQuery para desmarcar() y desvincular() eventos?

window.onload = init; 
function init() { 
    $("#startButton").css('background-color', 'beige').click(process_click); 
    $("#startButton").css('background-color', 'tan').unclick(); 
} 

¿Cómo puedo eliminar los eventos de mis elementos?

Respuesta

18

No existe tal cosa como unclick(). ¿De dónde has sacado eso?

Puede eliminar controladores de eventos individuales a partir de un elemento llamando unbind:

$("#startButton").unbind("click", process_click); 

Si desea eliminar todos los manipuladores, o si se utiliza una función anónima como un manipulador, se puede omitir el segundo argumento de unbind() :

$("#startButton").unbind("click"); 
+0

http://www.visualjquery.com/1.0.4.html unclick (fn) Elimina un evento de clic enlazado de cada uno de los elementos coincidentes. Debe pasar la función idéntica que se utilizó en el método de vinculación original. –

+2

Gracias por la información. Profundicé un poco más y descubrí que quitar un clic() se eliminó en jQuery 1.1. – Jim

3

unbind es tu amigo.

$("#startButton").unbind('click') 
0

¿Estás seguro de que deseas desvincularlo? ¿Qué pasa si más adelante quieres vincularlo una y otra vez? No me gusta el enlace/desvinculación de eventos dinámicos, ya que tienden a salirse de control cuando se llaman desde diferentes puntos de tu código.

Es posible que desee considerar opciones alternativas:

  • cambio el botón propiedad "desactivado"
  • implementar su lógica interna "process_click" función

Sólo mis 2 centavos, no es un universal, solución.

6

O usted podría tener una situación en la que desea desenlazar la función clic justo después de que lo utilice, como si tuviera que:

$('#selector').click(function(event){ 
    alert(1); 
    $(this).unbind(event); 
}); 
Cuestiones relacionadas