Estoy usando ajax y asp.net. Tengo una función de JavaScript que crea muchas otras funciones de JavaScript con setTimeout. Después de los happennes de postback asincrónicos, quiero deshabilitar todos estos eventos setTimeouted. ¿Cómo puedo hacer eso?¿Cómo puedo desactivar todos los eventos de setTimeout?
Respuesta
Cuando llame al setTimeout()
, almacene el ID del temporizador para que pueda borrarlo. Si está creando muchos tiempos de espera, una matriz es una buena opción para almacenar los ID. Por ejemplo:
var timeouts = [];
//then, store when you create them
timeouts.push(setTimeout({ ... }, 1000));
Entonces, cuando usted quiere limpiar ellos:
for (var i = 0; i < timeouts.length; i++) {
clearTimeout(timeouts[i]);
}
//quick reset of the timer array you just cleared
timeouts = [];
Como @Robert se señala más adelante, clearTimeout()
no generará un error si ya ha tenido el tiempo de espera, por lo que no hay raza/problemas de tiempo aquí.
No estoy seguro si puede hacerlo a nivel mundial, pero el método más común es usar clearTimeout. Usted pasa el valor de retorno de setTimeout() a clearTimeout(), puede usar una var global para almacenar todos los vars de timeout.
Si no puede obtener acceso al código donde está configurado el temporizador, es posible que la respuesta de Nick no funcione, por lo que todo lo que puedo pensar es sobre este truco.
¡Es un truco, úselo con precaución!
// Set a fake timeout to get the highest timeout id
var highestTimeoutId = setTimeout(";");
for (var i = 0 ; i < highestTimeoutId ; i++) {
clearTimeout(i);
}
Básicamente se agarra la más alta Identificación del temporizador y borra todo menos de eso. ¡Pero también es posible eliminar otros temporizadores que no desea borrar!
Gracias a Vaidotas, actualicé mi función de tiempo de espera configurada para ser más amigable con el navegador – SeanDowney
+1 ¡este es un fragmento muy útil para pegar en la consola Javascript para desactivar todos los tiempos de espera! –
Este truco causa errores difíciles de atrapar porque si una biblioteca de terceros utiliza setTimout y setInterval para la inicialización, esa biblioteca dejaría de funcionar sin ningún motivo, como acabo de descubrir. – user2191332
En primer lugar, yo estaba usando este código:
var x = setTimeout('');
for (var i = 0; i < x; i++)
clearTimeout(x);
Sin embargo, esta paz de código no funciona en Google Chrome. Así que hice mejora para esto:
var x = setTimeout('alert("x");',100000); //It is very low probability that after 100 seconds x timeout will not be cleared
for (var i = 0; i <= x; i++)
clearTimeout(i);
Por último, se trata de un corte, como se mencionó en el comentario anterior, a fin de utilizarlo con cuidado.
Editar: fija variable de mal utilizado en bucle (uso i en lugar de x)
- 1. ¿Cómo puedo desactivar todos los eventos táctiles en todos los elementos secundarios de un ViewGroup?
- 2. Cómo desactivar todos los sonidos en Android
- 3. Cómo desactivar ReSharper "Buscar todos los usos"
- 4. ¿Cómo puedo vincular todos los eventos en un elemento DOM?
- 5. Cómo deshabilitar todos los eventos de clic de un diseño?
- 6. ¿Cómo escuchar todos los eventos de Apple?
- 7. desactivar todos los elementos de HTML
- 8. Cómo desencadenar eventos en todos los elementos
- 9. Desactivar todos los índices no agrupados
- 10. Cómo rastrear o depurar todos los eventos de javascript disponibles
- 11. Lista maestra de todos los eventos Tkinter?
- 12. ¿Puedo escuchar los eventos táctiles de Android?
- 13. ¿Cómo puedo desactivar todos los elementos dentro de un fieldset en jQuery?
- 14. ¿Cómo desactivar temporalmente todos los bloques try catch?
- 15. Oyente HTML5 EventSource para todos los eventos?
- 16. WinForms: desactivar temporalmente un controlador de eventos
- 17. Cómo eliminar todos los controladores de eventos Click en Jquery
- 18. ¿Cómo eliminar todos los controladores de eventos Click?
- 19. desactivar eventos burbujeante C# WPF
- 20. En Backbone.js, ¿qué son todos los eventos para los "binds"?
- 21. ¿Cómo puedo desactivar _moz_resizing?
- 22. Usando Firefox, ¿cómo puedo controlar todos los eventos de JavaScript que se disparan?
- 23. ¿Cómo puedo desactivar Java basurero?
- 24. ¿Cómo puedo desactivar los módulos de administración de Django Apio?
- 25. Cómo desactivar/desactivar algunos de los elementos de GtkMenu
- 26. ¿Cómo puedo desactivar los errores de javascript en "TWebbrowser"?
- 27. ¿Cómo puedo obtener todos los calendarios y sus eventos desde la aplicación iphone?
- 28. ¿Cómo puedo capturar todos los eventos del mouse en un JFrame/Swing?
- 29. ¿Cómo puedo cargar todos los eventos en el calendario usando Ajax?
- 30. Mostrando todos los eventos de emisión en Android
También digno de mención, 'clearTimeout()' no a través de una excepción si se pasa un ID no válido (si el tiempo de espera ya ocurrió) . – Robert
@Robert - Buen punto, tiendo a dar esto por hecho, pero lo agregaré, en caso de que haya alguna preocupación al respecto :) –
Me gustaría pensar que con el modelo de un solo subproceso javascript que: En todos los casos Una vez que ClearTimeout haya finalizado, hay una garantía de que el evento de tiempo de espera no volverá a suceder. No está en los documentos, ¿no hace falta decirlo? – jcalfee314