Tengo una aplicación ajax que ejecutará funciones en cada interacción. Me gustaría poder ejecutar mi función de configuración cada vez para que todo mi código de configuración para esa función permanezca encapsulado. Sin embargo, los elementos de unión más de una vez significan que el controlador se ejecutará más de una vez, lo que obviamente es indeseable. ¿Hay alguna manera elegante en jQuery de invocar bind en un elemento más de una vez sin que se llame al controlador más de una vez?En jQuery, ¿hay alguna manera de vincular solo un clic una vez?
Respuesta
podría adjuntar el evento para document
con la función one()
:
$(document).one('click', function(e) {
// initialization here
});
Una vez ejecutado, este controlador de eventos se elimina de nuevo por lo que no va a funcionar de nuevo. Sin embargo, si necesita la inicialización para ejecutar antes de el evento click de algún otro elemento, tendremos que pensar en otra cosa. Usar mousedown
en lugar de click
podría funcionar entonces, ya que el evento mousedown se activa antes del evento click.
El usuario jQuery one
funciona como Tom dijo, pero desactive el controlador cada vez antes de volver a vincular. Ayuda tener el controlador de eventos asignado a una variable que usar una función anónima.
var handler = function(e) { // stuff };
$('#element').unbind('click', handler).one('click', handler);
//elsewhere
$('#element').unbind('click', handler).one('click', handler);
También se puede hacer .unbind('click')
para eliminar todos los manipuladores clic adjuntos a un elemento.
La respuesta de Chetan Sastry es lo que quieres. Básicamente solo llame a $ (elemento) .unbind (evento); antes de cada evento.
Así que si usted tiene una función como loadAllButtonClicks() que contiene todos los métodos
$(element).on("click", function(){});
para cada botón en su página, y que corra el que cada vez que se hace clic en un botón, esto obviamente va a producir más de un evento para cada botón. Para solucionar esto sólo tiene que añadir
$(element).unbind(event);
antes de cada
$(element).on("click", function(){});
y va a desatar todos los eventos de ese elemento, a continuación, añadir el evento solo clic.
También puede usar .off() si desvincular no hace el truco. Asegúrese de que el selector y evento dado a .OFF coinciden exactamente con los previstos inicialmente para .ON():
$("div.selector").off("click", "a.another_selector");
$("div.selector").on("click", "a.another_selector", function(e){
Esto es lo que funcionó para mí en la resolución de la misma ajax recarga problema.
Me gusta esto porque $ (element) .unbind (event); la solución eliminaría todos los eventos del tipo (por ejemplo, hacer clic) del elemento, mientras que este método simplemente elimina el relacionado con el selector en cuestión y deja a otros conectados incluso si comparten el mismo tipo de evento. –
- 1. ¿Hay alguna manera de "requerir" un archivo JS solo una vez en nodejs?
- 2. ¿Hay alguna manera de establecer una propiedad una vez solo en C#
- 3. Jquery: ¿hay alguna manera de resaltar el texto de una Div cuando haces clic en él?
- 4. ¿Hay alguna forma de pasar el contexto para vincular jQuery?
- 5. ¿Hay alguna manera de marcar o vincular a una sección de una página sin un ancla?
- 6. jQuery - Haz solo una vez
- 7. ¿Hay alguna manera de realizar una derivación de jQuery encadenando solo si una condición es verdadera?
- 8. ¿Hay alguna manera de simular un clic en una alerta en JavaScript?
- 9. ¿Hay alguna manera de vincular un párrafo específico en una página sin anclas?
- 10. ¿Hay alguna forma de vincular Keyboard.FocusedElement?
- 11. jQuery: ¿Hay alguna manera de "actualizar" los manejadores de eventos?
- 12. Hay una manera de vincular GLKit en una aplicación IOS4?
- 13. ¿Hay alguna manera de desactivar una etiqueta?
- 14. En Visual Studio, ¿hay alguna manera de agrupar solo comentarios?
- 15. jQuery botón haga clic en actualizar de jqGrid solo disparando una vez
- 16. ¿Hay alguna manera de volver a vincular una solución sin reconstruir ningún proyecto?
- 17. ¿Hay alguna manera de obtener un artículo de un conjunto en O (1) vez?
- 18. ¿Hay alguna manera de forzar una actualización de solo un encabezado en UITableView?
- 19. ¿Hay alguna manera de leer desde un sitio web, una línea a la vez?
- 20. el diálogo de jquery ui se abre solo una vez
- 21. ¿Hay alguna manera de desencadenar un stacktrace cada vez que se utiliza un registrador en particular?
- 22. ¿Cómo vincular la función a los eventos DOM una vez y solo una vez para que no se ejecuten por segunda vez en el desencadenamiento del evento?
- 23. ¿Hay alguna manera de instalar solo ADB sin SDK completo?
- 24. ¿Hay alguna manera de no enviar un formulario web completo al hacer clic en un botón?
- 25. ¿Hay alguna manera de instalar solo el cliente mysql (Linux)?
- 26. ¿Hay alguna manera de pausar una CABasicAnimation?
- 27. ¿Hay alguna manera de "limpiar" una superficie?
- 28. La alerta de jQuery Tools funciona una vez (pero solo una vez)
- 29. ¿Hay alguna manera de vincular elementos de trabajo entre proyectos en TFS
- 30. ¿Alguna vez es imposible escribir una biblioteca de solo encabezado?
Falta un ');' allí. – Ben
Oh gracias Ben, arreglando ... –
No sabía de este. – DMin