AJAX - No se me detiene el setInterval

 
Vista:

No se me detiene el setInterval

Publicado por Yubal (3 intervenciones) el 15/01/2019 14:19:22
Hola compañeros:

Espero que me podaís resolver el siguiente problema, el cual es el siguiente:



Problema: El problema es que no se me detiene el setInterval



Mi objetivo es el siguiente:



Objetivo: Que cuando el focus esté en algún input se me detenga o se pare el setInterval para poder escribir



El código es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<head>
<script>
 
	function Ajax() {
$( "#Comentarios_Mostrar" ).load("Comentario_Mostrar.php", function() {
 
if (tiempo == 0 || !tiempo || tiempo == null) {
		var tiempo = setInterval(function() { Ajax(); }, 5000);;
	}
 
		$('input[type="text"]').focus(function() {
			var tiempo = 1;
			$("#lol").html(tiempo);
		})
 
		$('input[type="text"]').focusout(function() {
			var tiempo = 0;
			$("#lol").html(tiempo);
		})
 
});
 
 
	//Parentesis que termina la función Ajax
	}
 
 
 
 
	</script>
</head>
<body onload="Ajax();">



Mi código que está en la otra página que es el siguiente:



1
2
3
4
5
6
7
8
9
10
11
12
echo "<br><br><br>";
	echo "<hr>";
	echo "<br><br>";
	echo '<form action="home.php" method="POST">';
		echo '<input type="number" name='.$publicacionesreal['id'].' value='.$publicacionesreal['id'].' hidden readonly>';
		echo '<input type="text" name="Comentario" placeholder="Escribe algo" style="width: 100%; height: 50px;" id="otro">';
		echo "<br><br>";
		echo '<input type="submit" name="Enviar2" value="Enviar" style="width: 100%; border-top-left-radius: 200px; border-top-right-radius: 200px; font-size: 105%; padding: 2%; position: relative; top: 26px;" id="Boton">';
echo '</form>';
echo "</div>";
echo '<p id="xd"></p>';
echo '<p id="lol"></p>';


Gracias de antemano.


Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 90
Oro
Ha mantenido su posición en AJAX (en relación al último mes)
Gráfica de AJAX

No se me detiene el setInterval

Publicado por xve (222 intervenciones) el 15/01/2019 19:25:17
Hola Yubal, estas definiendo varias veces la variable tiempo, y siempre dentro de la función ajax()... ademas, por cada llamada a la función ajax() vuelves a ejecutar setInterval(), por lo que cada 5 segundos, vas multiplicando el numero de setInterval() que se estan ejecutando.

tienes que ejecutar una sola vez el setInterval() fuera de la función ajax() y utilizar la variable con el intervalID que devuelve la función para detenerlo cuando coja el focus.

No se si me he sabido explicar...

https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No se me detiene el setInterval

Publicado por Yubal (3 intervenciones) el 15/01/2019 21:18:08
Sí te entendí, de hecho hice lo mismo que me dijiste pero hay problemas y es que cuando dejo de hacer focus al input no se vuelve a cargar el setInterval, sino que se queda parado, te dejo el código aquí abajo, por cierto gracias por la ayuda

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<script>
 
var cuenta = 0;
 
 
	function Ajax() {
$( "#Comentarios_Mostrar" ).load("Comentario_Mostrar.php", function() {
 
	$( ' input[type="text"] ' ).focus(function() {
		clearInterval(tiempo);
		cuenta++;
	})
 
	$( ' input[type="text"] ' ).focusout(function() {
		cuenta = 0;
 
	})
 
});
 
}
 
 
if (cuenta > 0) {
 
 
 
}else if(cuenta == 0) {
	var tiempo = setInterval(function() {
		Ajax();
	}, 1000);
}
 
 
 
	</script>


Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 90
Oro
Ha mantenido su posición en AJAX (en relación al último mes)
Gráfica de AJAX

No se me detiene el setInterval

Publicado por xve (222 intervenciones) el 16/01/2019 08:22:20
Yubal, creo que te lías mucho con las variables... mira como yo lo haría:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
var tiempo;
 
function Ajax() {
	$('input[type="text"]').focus(function() {
		clearInterval(tiempo);
	});
 
	$('input[type="text"]').focusout(iniciar);
}
 
function iniciar()
{
    tiempo = setInterval(function() {
        Ajax();
    }, 1000);
}
iniciar();
</script>

Te sirve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No se me detiene el setInterval

Publicado por Yubal (3 intervenciones) el 16/01/2019 09:56:24
Hola xve, si me ha servido, muchas gracias por tú ayuda, el código al final me ha quedado así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<script>
 
var tiempo;
 
function Ajax() {
 
	$( "#Comentarios_Mostrar" ).load("Comentario_Mostrar.php", function() {
 
	$('input[type="text"]').focus(function() {
		clearInterval(tiempo);
	});
 
	$('input[type="text"]').focusout(iniciar);
});
 
 }
 
 
function iniciar()
{
    tiempo = setInterval(function() {
        Ajax();
    }, 1000);
}
 
 
iniciar();
 
 
	</script>

Un saludo y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar