Seguro que en algún otro lugar de su (s) script (s), el evento "clic" está vinculado nuevamente al mismo elemento, como sugieren otras respuestas / comentarios.
Tuve un problema similar y para verificarlo, simplemente agregué un console.log
comando a mi script, como en el siguiente fragmento:
$("#link_button")
.button()
.click(function () {
console.log("DEBUG: sliding toggle...");
$("#attachmentForm").slideToggle("fast");
});
Si, al hacer clic en el botón, obtiene algo similar a la imagen de abajo desde la consola de desarrollo de su navegador (como lo hice yo), entonces estará seguro de que el click()
evento se ha vinculado dos veces al mismo botón.
Si necesita un parche rápido, la solución propuesta por otros comentaristas de usar el off
método (por cierto, unbind
está en desuso desde jQuery 3.0) para desvincular el evento antes de (re) vincularlo funciona bien, y también lo recomiendo:
$("#link_button")
.button()
.off("click")
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
Desafortunadamente, ¡esto es solo un parche temporal! Una vez que se resuelva el problema de hacer feliz a su jefe, debería profundizar un poco más en su código y solucionar el problema de la "vinculación duplicada".
La solución real depende, por supuesto, de su caso de uso específico. En mi caso, por ejemplo, hubo un problema de "contexto". Mi función se invocaba como resultado de una llamada Ajax aplicada a una parte específica del documento: recargar todo el documento en realidad era recargar los contextos de "página" y "elemento", lo que provocaba que el evento se vincule al elemento dos veces .
Mi solución a este problema era aprovechar el jQuery una función, que es la misma que en la excepción de que el evento es desvinculan automáticamente después de la primera solicitud. Eso fue ideal para mi caso de uso, pero nuevamente, podría no ser la solución para otros casos de uso.