2011-07-29 27 views
6

Este evento de delegado se activa dos veces (no siempre, a veces).Evento de delegado que se activa dos veces

client.bindButtonClickFunction = function(){ 

    $("#client-plugin").delegate(".client-button", "click", function() 
    { 
     var id = this.id.split('-')[2]; 
     client.retrieveMessageByID(id); 
    }); 
}; 

que llame a la función después de la inserción de todos los "botones .client" 's.

¿Alguna idea sobre cómo detenerlo? Intenté event.stopPropagation(), y también redefiniendo y re-delegando en vano.

Esto está en Chrome, como parte de un complemento de Chrome.

+1

difícil decir sin más información. Lo más probable es que llame 'bindButtonClickFunction' dos veces ... por cierto. no necesita esperar que se inserte el '.client-button's,' delegate' funciona de la misma manera que 'live'. –

+3

¿Intentó detener la propagación inmediata? http://api.jquery.com/event.stopImmediatePropagation/ – exoboy

+0

Acabo de solucionar un problema de dos descargas que estaba teniendo. Como dijo @FelixKling, tenía mi declaración de delegado() dentro de algunas funciones de $ (documento) .ready(), básicamente llamando a la función varias veces. –

Respuesta

20

Dependiendo de cómo se registra la delegado, es posible que desee hacer:

$("#client-plugin").undelegate('event').delegate('event', ...) 

Además, trate de añadir un return false de su manejador.

+1

Habría respondido lo mismo. Sugiero que lo hagas y luego vuelvas a probar para ver si todavía recibe dos llamadas. Si lo haces, sabes que el problema está en lo que se llama el método que se ejecuta dos veces, no en el método en sí. – jammypeach

+0

@mrchief: Tengo el mismo problema, es decir, he activado la función, y la clase que se desencadena se declara dos veces en mi código, por lo que cuando hago clic en esa clase, se dispara el disparador dos veces, y si uso el retorno falso, entonces mi casilla de verificación no está marcada, ¿le diría alguna otra solución? – Suleman

+0

@Suleman: 'UnDelegate' también debería funcionar en su caso. La segunda instanciación debe anular el registro y luego registrar su manejador una vez. Si tiene más preguntas, abra una nueva pregunta y publique un código. – Mrchief

7

tiene que dejar de propagación inmediata

$("#client-plugin").on(".client-button", "click", function (e) { 
    e.stopImmediatePropagation(); 
    var id = this.id.split('-')[2]; 
    client.retrieveMessageByID(id); 
}); 
+0

como http://stackoverflow.com/a/14813418/3786343 – Kamlesh

Cuestiones relacionadas