Bonjour à tous,

Après avoir passé pas mal de temps à rechercher une solution à mon problème, j'ai décidé de venir vous pauser la question histoire de savoir si vous auriez pus m'indiquer quels erreurs j'ai bien pus faire.

Je vous explique, j'ai un formulaire que je ne soumet que lorsque j'obtiens une réponse "OK" depuis 4D (Comme du php en gros, et la réponse est une variable texte). Le soucis c'est qu'il n'y a pas de problème avec IE et FF mais j'ai eu l'occasion de le tester sous d'autres navigateurs et c'est un peu le .

Je tient donc aussi à préciser que tout fonctionne sous IE et FF ce qui me semble incompréhensible c'est qu'apparemment, notamment sous safari, j'ai l'impression que l'AJAX ne récupère rien du tout et qu'il soumet le formulaire quand même....... Un vrai casse-tête ou je ne trouve pas de réponse... étant donné que j'utilise la librairie JQuery, il est censé gérer les différents navigateurs...

Enfin bref voici un peu mon code,

Ici ma fonction qui test les erreurs du formulaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
function testErreurs(IDElements, Methode, idFormulaire){
				var vecteur = IDElements.split(",");
				var valeur="";
				var string="";
				var data="";
				for (i=0; i<vecteur.length; i++){
  					valeur = document.getElementById(vecteur[i]).value;
  					if (i==0){
    					string = vecteur[i]+'='+encodeURIComponent(valeur);
  					}else{
    					string=string+'&'+vecteur[i]+"="+encodeURIComponent(valeur);
  					}
				}	
$.get(Methode, { donnee: string},
  function(data){
		  	var ErreurFon = data;
			var tabVecteur = ErreurFon.split("/");
			var div="#erreur";
			var div2="erreur";
			function runEffect2(){
				var selectedEffect = "fold";
				var options = {};
				$(div).hide(selectedEffect,options,2000);
			};
			function runEffect(){
				var selectedEffect = "fold";
				var options = {};
				$(div).show(selectedEffect,options,2000,callback);
			};
			function callback(){
				setTimeout(function(){
					$(div+":visible").removeAttr('style').hide().fadeOut();
					runEffect2();
				}, 10000);
			};	
			function testVariable(TxtErreur, NumErreur){
				setTimeout(function(){	
				if(TxtErreur!=""){
					if(NumErreur>0){
						document.getElementById(div2).style.backgroundColor='#06C'; 
					}
					if(NumErreur<0){
						document.getElementById(div2).style.backgroundColor='#C00'; 
					}
					document.getElementById(div2).style.visibility='visible';
					document.getElementById(div2).innerHTML = TxtErreur;
					runEffect();
				}
				}, 1000);
			};
			if(tabVecteur=="OK"){
				alert('coucou');
				document.forms[idFormulaire].submit();
			}else{
				testVariable(tabVecteur[1],tabVecteur[0]);
				return false;
				$(div).hide();
			}
  });
}
Ici ma fonction qui test si les champs sont vides :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
function TestChampVide(idChamp, idDiv){
	var champ = document.getElementById(idChamp).value;
	if(champ==""){
			function EffetPartir(){
				var selectedEffect = "fold";
				var options = {};
				$("#ChampNull").hide(selectedEffect,options,2000);
			}
 
			function EffetApparaitre(){
				var selectedEffect = "fold";
				var options = {};
				$("#ChampNull").show(selectedEffect,options,2000,callback);
			}
 
			function callback(){
				setTimeout(function(){
					$("ChampNull:visible").removeAttr('style').hide().fadeOut();
					EffetPartir();
				}, 10000);
			};
			EffetApparaitre();
			document.getElementById(idDiv).innerHTML = "A remplir";
			return false;
			$("#ChampNull").hide();
	}
	else{
		document.getElementById(idDiv).innerHTML = "";
		}
}
 
// JavaScript Document
et ici l'appel de mon code dans la page index :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
37
38
 
<script type="text/javascript">
$(document).ready(function() // à ne lancer qu'au chargement complet de la page
{
   $('#vLogin').keypress(function(e)
   {
      // onKeyPress
      if (e.keyCode == 13)
         testErreurs('vLogin,vMdp','UtilisateurMethode','Connexion');
 
   }).blur(function()
   {
      // onBlur;
      TestChampVide('vLogin', 'loginNull');
 
   });
 
   $('#vMdp').keypress(function(e)
   {
      // onKeyPress
      if (e.keyCode == 13)
         testErreurs('vLogin,vMdp','UtilisateurMethode','Connexion');
 
   }).blur(function()
   {
      // onBlur;
      TestChampVide('vMdp', 'mdpNull');
 
   });
 
   $('#boutonConnexion').click(function()
   {
      //onClick
      testErreurs('vLogin,vMdp','UtilisateurMethode','Connexion');
 
   });
});
</script>
En espérant que vous pourrez m'aiguiller sur une voie, je vous remercie d'avance ^^

[EDIT] J'ai réussis à plus ou moins cibler le problème... cela viendrais apparemment de l'évènement KeyPress... lors du clic sur le bouton aucun soucis cela fonctionne mais lors de l'évènement KeyPress il ne fait absolument pas ce que je veux...

[EDIT2] Voilà j'ai trouvé d'ou cela venait. En faite je dois désactiver la touche Enter sur toute la page. Et lorsque je suis dans l'un de mes champs et que j'appuie sur Enter je fais mon traitement. (voici le bout de code à ajouter si besoin)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
 <script language="JavaScript">
 function process_keypress() {
 if (window.event.type == "keypress" & window.event.keyCode == 13)
 return !(window.event.type == "keypress" & window.event.keyCode == 13);
 }
 document.onkeypress = process_keypress;
 </script>