2009-11-25 45 views
11

Así que hay dos limitaciones a mi pregunta:jQuery: unión y separación en directo Haga clic en Eventos

  1. debo usar una llamada a la función externa en mi evento de clic, y
  2. que debe utilizar un evento click en vivo, más bien vinculante un típico evento de clic.

Así que mi problema es que estoy tratando de desvincular un evento de clic después de que ocurra, y luego volver a vincularlo una vez que se complete el código de evento de clic. Hago esto para evitar clics duplicados mientras el código está actualmente en proceso (tengo una animación de fundido de entrada/salida que permitirá hacer clic dos o tres veces con rapidez en el botón, y así ejecutar mi código 2 o 3 veces, lo cual es deseable) . El código que estoy usando es el siguiente:

$item.live("click", handleClick); 

y

function handleClick(ev) { 

    $(this).die("click"); 

    // perform code here, including things with 'ev' 

    $(this).live("click", handleClick); 
} 

¿Estoy loco, o si ello se trabaja sin ningún problema? En este momento, puedo hacer clic una vez, pero no de nuevo después. Así que claramente el dado() está funcionando, pero no está siendo redirigido por alguna razón a esa función. He verificado que alcanza el código en handleClick() para volver a vincular el clic en vivo.

¿Alguna idea? Cualquier ayuda sería muy apreciada. Gracias.

Respuesta

8

De acuerdo con la documentation:

Los eventos en vivo en la actualidad sólo el trabajo cuando se usa contra un selector.

$(this) no es un selector.

+0

@ Greg, interesante. Tal vez si asigné el evento de clic en vivo en la función como tal: 'var $ tempVar = $ ('#' + $ (this) .attr ('id'))', y luego dijo '$ tempVar.live (" clic ", handleClick)' ¿Crees que esto funcionaría? –

+0

I * think * tan ... – Greg

+2

Sí eso funcionará – PetersenDidIt

6

para desenlazar los manipuladores de clic de todo lo que se enlazan con el .live(), utilice el método .die():

$(".clickme").die("click"); 
0

Usted puede utilizar este modelo para desenlazar el elemento se ha hecho clic y dejar que todos los otros viven :

$('a.myselector').live('click', function() { 

    // do things 

    $(this).unbind('click').live('click', function() {return false;}); 

    return false; // block the link 
}); 

trabajos con jQuery 1.8.2

Cuestiones relacionadas