Forum Clubic

Problème avec alert(), freeze du popup

Salut, j’ai un problème que je n’arrive pas à résoudre avec les fenêtre alert en javascript.
Quand je veux déplacer la fenêtre, elle se freeze et on ne peut plus appuyer sur le bouton OK pendant un petit moment.
ex:

Je n’ai ce problème que sous firefox (3.6.8), sous IE8 y’a pas de soucis.

J’ai fait une page de test pour pouvoir tester …
j’ai un formulaire en 2 parties, quand on valide et que c’est bon ça passe au 2e formulaire etc …
si le champ n’est pas remplit ou incorrect, ça affiche un popup javascript alert() disant qu’il y a une erreur, puis je redirige sur la page courante pour l’actualiser (normalement je gère la conservation des champs par des cookies pour pas à avoir à tout réécrire).
Il semblerait qu’après plusieurs affichage du popup, il freeze, ex :
j’appuie sur ok 4-5 fois de suite, quand le 3e ou 4e popup sera affiché tout d’abord on le vois vide, et en plaçant la souris dedans il se remplit, on ne peut pas le déplacer, le bouton ok ne fonctionne qu’après plusieurs clicks

J’ai écris cette page vite fais et l’erreur apparaît

http://fdalex21.free.fr/index.php

voila ce que j’ai écris dedans :
index.php


12345
<form method='POST' action='?' id='formulaire'>
	<input type='text' name='pass' value='' class='input'/>
	<input type='submit' name='ok' value='valider' class='input'/>
</form>
<?php
	echo "<div>hello world</div>";
?>

<?
	if(isset($_POST['ok']))
	{
		if($_POST['pass'] != "12345")
		{
			echo "<script language='javascript' type='text/javascript'>
				alert('raté !');
				window.location.replace('index.php');
			</script>";
		}
		else
		{
			echo "<script language='javascript' type='text/javascript'>
				window.location.replace('index2.php');
			</script>";
		}
	}
?>

index2.php


54321
<form method='POST' action='?' id='formulaire'>
	<input type='text' name='pass2' value='' class='input'/>
	<input type='submit' name='ok2' value='valider' class='input'/>
</form>
<?php
	echo "<div>hello world</div>";
?>

<?
	if(isset($_POST['ok2']))
	{
		if($_POST['pass2'] != "54321")
		{
			echo "<script language='javascript' type='text/javascript'>
				alert('raté !');
				window.location.replace('index2.php');
			</script>";
		}
		else
		{
			echo "<script language='javascript' type='text/javascript'>
				window.location.replace('index3.php');
			</script>";
		}
	}
?>

index3.php


hello world !

Quelqu’un a une idée ?
Edité le 20/08/2010 à 14:39

Hihihi on n’aurait pas deviné.

Plus sérieusement, une identification par JS c’est pas le must :confused:

Essaye


<form method='POST' action='' id='formulaire'>
	<input type='text' name='pass' value='' class='input'/>
	<input type='submit' name='ok' value='valider' class='input'/>
</form>
<?php
	echo "<div>hello world</div>";
	if(isset($_POST['ok']))
	{
		if($_POST['pass'] != "12345")
		{
			echo "<script>alert('raté !');";
 		        header('Location: index.php');
		}
		else
		{
 		        header('Location: index2.php');
		}
	}
?>

Je ne change pas grand chose, excepté que j’enlève le point d’interrogation qui ne sert à rien :etonne2:
et que je remplace les redirections JS par des redirections php.

Ce qui va fonctionner super, vu que des données ont été émises… (donc header = kaput).

Et quitte à faire dans la critique, ce n’est pas une identification par JS, juste une erreur affichée quand une erreur d’identification survient.

Pour ma part, j’aurai tendance à dire que ton problème est lié au window.location.replace. Faudrait tenter avec un document.write(), afin de vérifier si ça déconne aussi.

Maintenant, tu peux également gérer cela en PHP avec des header(), mais cela t’impliquera de ne pas afficher de code (aucune sortie), ça sera en revanche plus propre.

l’idée de base est la suivante :

<?php
if (... mot de passe fourni ?...) {
	if (... test mot de passe ...) {
		// OK
		header('Location: /index2.php'); // chemin absolu (cf RFC)
		exit; // pas besoin de continuer le script
	}
	$errorPassword = true;
} else {
	$errorPassword = false;
}
?>
...
<?php if ($errorPassword) {?><p class="red">Mot de passe erroné</p><?php } ?>
...