problème saisie semi-automatique (autocomplete) avec javascript

problème saisie semi-automatique (autocomplete) avec javascript - HTML/CSS - Programmation

Marsh Posté le 07-02-2006 à 11:54:08    

Bonjour à tous,
J'ai un assez gros problème avec un autocomplete (ou saisie semi-automatique).
En effet, j'ai un petit script qui me permet d'afficher un select qui change avec la saisie de l'utilisateur.
Ce script fonctionne parfaitement (bon il est un peu lent, mais il y a 5000 options, c'est logique :P)
Mon problème vient de la saisie semi-automatique d'Internet Explorer (version 6, pour le détail...). En effet, je dios l'annuler pour éviter qu'elle ne s'affiche par dessus ma propre saise automatique. Ce n'est, là encore, pas un problème : j'ai rajouté l'attribut "autocomplete=off" à mon input.  
MAIS... Je dois activer la saisie semi automatique (celle d'IE) pour d'autre champs du formulaire! Naïf que je suis, je me dis qu'avec un autocomplete="on" ca ira... ben non! Enfin si... a moitié... J'ai déjà quelques valeurs d'enregistrées pour ces input, et il affiche bien la zone de saisie semi-auto, mais Internet Explorer ne m'enregistre pas d'autres valeures?!
 
PS: si je ne suis pas clair, n'hésitez pas à me le dire... J'ai vraiment besoin de trouver une solution à ce problème (et ca me fait   :pfff:  :cry: ... hem... pardon)


Message édité par haltabush le 07-02-2006 à 14:13:03
Reply

Marsh Posté le 07-02-2006 à 11:54:08   

Reply

Marsh Posté le 07-02-2006 à 15:06:07    

Code :o

Reply

Marsh Posté le 07-02-2006 à 15:22:30    

En gros :  
Classe JS

Code :
  1. /*
  2. Remarque :
  3. - la liste javascript est un tableau qui existe tout le temps
  4. - la liste HTML est crée, affichée, supprimée à partir de la liste javascript
  5. - besoin de deux identifant en paramètres pour le retour des valeurs :  
  6.  - un identifiant pour retourner la valeur (id_valeur)
  7.  - un identifiant qui contient le texte entré et pour retourner le texte (id_texte)
  8. */
  9. //Création d'un objet javascript de type liste déroulante
  10. function CreerListe(id_liste, nom_liste, hauteur_liste, largeur_liste, id_valeur, id_texte, formulaire) {
  11. this.id        = id_liste;
  12. this.nom       = nom_liste;
  13. this.hauteur   = hauteur_liste;
  14. this.largeur   = largeur_liste
  15. this.id_valeur = id_valeur;
  16. this.id_texte  = id_texte;
  17. this.search    = "";
  18. this.nb        = 0;
  19. this.Add       = AjouterItem;
  20. this.Ecrire    = EcrireListe;
  21. this.Actualise = ActualiseListe;
  22. this.Check     = CheckListe;
  23. this.Lien      = LienListe;
  24. this.Affiche   = AfficheListe;
  25. this.Masque    = MasqueListe;
  26. // this.nom_form  = formulaire;
  27. //tableau des noeuds de la liste
  28. this.nodes     = new Array();
  29. this.obj       = id_liste + "Object";
  30. eval(this.obj + "=this" );
  31. return this;
  32. }
  33. //Création d'un noeud qui va contenir la valeur et le texte
  34. function CreerNoeud(valeur, texte){
  35. this.valeur = valeur;
  36. this.texte  = texte;
  37. }
  38. //Correspond à la fonction Add, ajout d'un élément à la liste javascript
  39. function AjouterItem(valeur, texte){
  40. //ajout à la fin du tableau d'un noeud contenant une valeur et un texte
  41. this.nodes.push(new CreerNoeud(valeur, texte));
  42. this.nb++;
  43. }
  44. //Méthode qui écrit/crée la liste HTML, une liste vide pour l'instant
  45. function EcrireListe() {
  46. var champ_texte = document.getElementById(this.id_texte);
  47. //les positions du champs texte sont récupéré
  48. var posX = (parseInt(champ_texte.style.top)+parseInt(champ_texte.style.height))+'px';
  49. var posY = champ_texte.style.left;
  50. var txt = '<div style="position:absolute;top:'+posX+';left:'+posY+';z-index:100;">';
  51. txt +='<select id="';
  52. if (document.layers) {
  53.  txt += this.id+"\" name=\""+this.nom+"\" size=\""+this.hauteur+"\" onclick=\""+this.obj+".Lien();\">";
  54. } else {
  55.  txt += this.id+'" name="'+this.nom+'" size="'+this.hauteur+'" style="width:'+this.largeur+';display:none" onclick="'+this.obj+'.Lien();">';
  56. }
  57. txt+="</select><div>";
  58. document.write(txt);
  59. }
  60. //Actualise automatiquement la liste HTML
  61. function CheckListe(){
  62. this.Actualise();
  63. //appel automatique de la fonction CheckListe par l'intermédiaire de this.obj.Check()
  64. if (document.layers) {
  65.  setTimeout(this.obj+".Check()", 1001)
  66. } else {
  67.  setTimeout(this.obj+".Check()", 100)
  68. }
  69. }
  70. //Actualise la liste HTML en fonction de contenu du du champ texte
  71. function ActualiseListe() {
  72. //récupération de la liste HTML
  73. listeaux = document.getElementById(this.id);
  74. //récupération de l'élement HTML qui contient le texte entré par l'utilisateur
  75. champaux = document.getElementById(this.id_texte).value;
  76. if (champaux!=this.search) {
  77.  this.search=champaux;
  78.  //la longueur de la liste HTML est remise à zéro
  79.  listeaux.options.length = 0;
  80.  //parcours de la liste javascript et création de la liste HTML
  81.  for (var i=0; i<this.nb; i++) {
  82.   //si le texte de la liste javascript commence par la chaine champaux, on crée un élément pour la liste HTML
  83.   if ( this.nodes[i].texte.substring(0,champaux.length).toUpperCase()==champaux.toUpperCase() ) {
  84.    var o = new Option(this.nodes[i].texte, this.nodes[i].valeur);
  85.    listeaux.options[listeaux.options.length] = o;
  86.   }
  87.  }
  88.  //affectation des attributs à la liste (marche pas sous IE6)
  89.  liste_option = document.getElementById(this.id).getElementsByTagName('option');
  90.  for (i=0; i<liste_option.length; i++){
  91.   liste_option[i].onmouseover = RollOver;
  92.   liste_option[i].onmouseout  = RollOut;
  93.  }
  94. }
  95. }
  96. //envoie de la sélection de l'utiliateur dans les deux éléments HTML id_valeur et id_texte
  97. function LienListe(){
  98. //récupération de la liste HTML
  99. listeaux = document.getElementById(this.id);
  100. //récupération de l'élément HTML id_valeur
  101. valaux = document.getElementById(this.id_valeur);
  102. //récupération de l'élément HTML id_texte
  103. champaux = document.getElementById(this.id_texte);
  104. //indice sélectionné dans la liste HTML
  105. i = listeaux.selectedIndex;
  106. //affectation des champs value et text
  107. valaux.value   = listeaux.options[i].value;
  108.  champaux.value = listeaux.options[i].text;
  109. //Modif pour l'ajotu de contrat :  
  110. if (champaux.name=="nom_client" && valaux.name=="client" && this.nom=="liste_client" ){
  111. RemplirContacts();
  112. }
  113. else{
  114. if (champaux.name=="nom_mannequin" && valaux.name=="mannequin" && this.nom=="liste_mann" ){
  115.  fctTestEnfant1();
  116.  this.Masque();
  117. }
  118. else{
  119.  //on masque la liste HTML après la sélection
  120.  this.Masque();
  121. }
  122. }
  123. }
  124. //Affichage de la liste HTML
  125. function AfficheListe(){
  126. //récupération de la liste HTML
  127. listeaux = document.getElementById(this.id);
  128. //on affiche la liste si elle contient au moins 1 valeur
  129. if(listeaux.options.length > 0){
  130.  listeaux.style.zIndex=5;
  131.  listeaux.style.display = "block";
  132. }else{
  133.  this.Masque();
  134. }
  135. }
  136. //Masquage de la liste HTML
  137. function MasqueListe(){
  138. //récupération de la liste déroulante
  139. listeaux = document.getElementById(this.id);
  140. //si la liste n'est pas déja masquée, on la masque
  141. if(listeaux.style.display == "block" ){
  142.  listeaux.style.display = "none";
  143. }
  144. }
  145. // coloration au passage de la souris
  146. function RollOver() {
  147. this.style.backgroundColor = '#000000';
  148. this.style.color = '#FFFFFF';
  149. }
  150. // retour à l'état normal
  151. function RollOut() {
  152. this.style.backgroundColor = '#FFFFFF';
  153. this.style.color = '#000000';
  154. }


 
 
Création de la liste de la saisie auto "maison"

Code :
  1. var Liste = new CreerListe('liste_client','liste_client',10,200,'client','nom_client');
  2. <?php
  3. mysql_select_db($database_connexion_totem, $connexion_totem);
  4. $requete = "SELECT id_client, raison_sociale FROM client WHERE visible=1 ORDER BY 2";
  5. $resultat = mysql_query($requete, $connexion_totem) or die(mysql_error());
  6. while ($ligne = mysql_fetch_assoc($resultat)){
  7. $id = $ligne['id_client'];
  8. $rs = $ligne['raison_sociale'];
  9. print("Liste.Add(\"$id\",\"$rs\" );\n" );
  10. }
  11. mysql_free_result($resultat);
  12. ?>


 
Et enfin, le code HTML:

Code :
  1. <form id="blabal" action="<? echo $_SERVER['PHP_SELF'];?>" method="post"/>
  2. <input type="hidden" name="client" id="client" value=""/>
  3. <input id="nom_client" name="nom_client" autocomplete="off" type="text" onKeyUp="Liste.Affiche();" value="" style="position:absolute;top:35px;left:220px;width:350px;height:22px;z-index:3;"/>
  4. <script type="text/javascript">
  5.  Liste.Ecrire();
  6.  Liste.Check();
  7. </script>
  8. <input type="text" autocomplete="on" id="blabla2" name="blabla2"/>
  9. </form>


 
 
Je rappelle que le JS fonctionne, ou du moins semble fonctionner, parfaitement. Le problème c'est que j'aimerais pouvoir remplir le champ "blabla2" avec la saisie semi-auto d'Internet Explorer, et ca mache pô...
Ca va faire 2 jours que je flanche là dessus... J'ai pas grand chose d'autre à faire, mais quand même...


Message édité par haltabush le 07-02-2006 à 15:25:54
Reply

Marsh Posté le 08-02-2006 à 11:31:39    

Ca n'a pas l'air d'aider beaucoup, mon code... Vous n'avez pas une ptite idée??

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed