Problème incroyable de compatibilité avec IE7

Problème incroyable de compatibilité avec IE7 - HTML/CSS - Programmation

Marsh Posté le 11-10-2007 à 18:42:42    

Bonsoir,
 
Je possède un jeu en ligne et j'ai mis en place un menu déroulant permettant de choisir parmis les différents ennemis à attaquer.
Ce menu déroulant à une composante dynamique puisque il permet l'affichage d'information supplémentaire ailleurs sur la page lors de la selection d'un des ennemis. Ces infos supplémentaire sont stockès dans le menu déroulant, dans l'attribut label.
Voilà pour la petite histoire, maintenant le code:

Code :
  1. <select name="villageaattaque" size="1" onChange="change_them()">
  2.             <option label='||SEPARATION||'></option>
  3.             <?
  4.                          //Du code (requète SQL, etc)
  5.      $resultat=mysql_query($req,$connexion);
  6.      $old="";
  7.      while($listevillage=mysql_fetch_object($resultat))
  8.      {
  9.         if($old <> $listevillage->village)
  10.        echo"<option label=\"$listevillage->pseudo||SEPARATION||$listevillage->nom\">". espaceit($listevillage->village) ."</option>\n";
  11.      $old=$listevillage->village;
  12.      }
  13.     ?>
  14.           </select>


 
Plus loin, on retrouve la fonction change_them():

Code :
  1. function change_them()
  2.    {
  3.  selection=document.forms["formattaquer"].villageaattaque.selectedIndex ;
  4.  label1 = document.forms["formattaquer"].villageaattaque.options[selection].label;
  5.  pos_sep=label1.indexOf("||SEPARATION||",0);
  6.  label_chef=label1.substring(0,pos_sep);
  7.  label_alliance=label1.substring(label_chef.length+14,label1.length);
  8.  if(label_alliance=='') label_alliance='Aucune';
  9.  document.forms["formattaquer"].elements["chef"].value=label_chef;
  10.  document.forms["formattaquer"].elements["alliance"].value=label_alliance;
  11.  //On s'occupe de l'innerHTML
  12.  output="<a href='index.php?page=profil&pseudo1="+label_chef+"'>Voir Profil</a>";
  13.  txt = document.getElementById('chef_link');
  14.  if(label_chef!="" )
  15.  {
  16.  txt.innerHTML = output;
  17.  }
  18.  else
  19.  {
  20.  txt.innerHTML = "";
  21.  }
  22.    }


 
Voici le problème:
Sur IE6 et Firefox, je retrouve bien dans le menu déroulant uniquement des noms de villages. L'affichage dynamique du pseudo et du village fonctionne.
Sous IE7, je retrouve le contenu de mon label c'est à dire "pseudoXXX||SEPARATION||AllianceXXX"
 
Note:$listevillage->pseudo est un pseudo, $listevillage->nom est le nom de l'alliance a laquelle appartient $listevillage->pseudo, $listevillage->village est le nom du village de $listevillage->pseudo.
 
Je n'arrive pas à trouver le problème.
 
Merci d'avance.


Message édité par smilm le 12-10-2007 à 11:51:44
Reply

Marsh Posté le 11-10-2007 à 18:42:42   

Reply

Marsh Posté le 12-10-2007 à 10:12:50    

Petit up discret :)

Reply

Marsh Posté le 12-10-2007 à 11:44:40    

C'est un problème de navigateur alors quel rapport avec le php?
Déplace plutôt dans "html/javascript" et poste du code si tu veux des réponses.

Reply

Marsh Posté le 12-10-2007 à 11:52:02    

Merci. Je viens de transférer le message dans le forum approprié.

Reply

Marsh Posté le 14-10-2007 à 20:53:35    

Petit up... :sarcastic:

Reply

Marsh Posté le 15-10-2007 à 14:46:52    

Citation :

Ces infos supplémentaire sont stockès dans le menu déroulant, dans l'attribut label.


http://www.w3.org/TR/html4/interac [...] def-OPTION
 

Citation :

label = text [CS]
    This attribute allows authors to specify a shorter label for an option than the content of the OPTION element. When specified, user agents should use the value of this attribute rather than the content of the OPTION element as the option label.


 
En clair c'est IE 7 qui a le bon comportement en affichant le contenu de l'attribut 'label'.
 
Pour corriger ton problème tu peux faire ça :
 - mettre tes infos ailleurs (dans un tableau par exemple)
 - au moment de la selection, récupérer l'info dans ce tableau
   Attention aux indices :
 

Code :
  1. function change_them()
  2. {
  3. selection = document.forms["formattaquer"].villageaattaque.selectedIndex;
  4. if (selection < 1) {
  5.   return;
  6. }
  7. label1 = mesInfos[selection - 1]; // -1 car le select à une ligne bidon
  8. ...
  9. }


Message édité par Bidem le 15-10-2007 à 14:49:19
Reply

Marsh Posté le 16-10-2007 à 12:17:02    

Merci beaucoup pour cette réponse.
 
Juste une question:
Mettre les valeurs dans un tableau, on parle d'un tableau généré en php puis transposé dans un tableau en javascript ? Si oui, comment faire ?
Je suis un peu rouillé...je sais. Merci d'avance :)

Reply

Marsh Posté le 16-10-2007 à 14:10:30    

Pas besoin de créer un tableau PhP, on peut créer les valeurs du tableau de la même manière que tu créais les <option>
 

Code :
  1. <html>
  2. <head>
  3.   <script type="text/javascript">
  4.     // construction du tableau js
  5.     var mesInfos = [
  6.     <?
  7.     //Du code (requète SQL, etc)
  8.     $resultat=mysql_query($req,$connexion);
  9.     $old="";
  10.     while($listevillage=mysql_fetch_object($resultat))
  11.     {
  12.       if($old <> $listevillage->village)
  13.         echo "\"$listevillage->pseudo||SEPARATION||$listevillage->nom\",\n";
  14.       $old=$listevillage->village;
  15.     }
  16.     ?>
  17.     ];
  18.     ...
  19.   </script>
  20. </head>
  21. ...
  22. </html>


Message édité par Bidem le 16-10-2007 à 14:17:39
Reply

Marsh Posté le 17-10-2007 à 07:16:40    

Ah ok! Génial !
Merci beaucoup :)

Reply

Marsh Posté le 18-10-2007 à 18:58:33    

Nouveau problème avec le javascript:
 

Code :
  1. function change_them2()
  2. {
  3. alert("change_them2" );
  4.  selection = document.forms["formattaquer"].villageaattaque.selectedIndex;
  5.  if (selection < 1) {
  6.   alert("return" );
  7.    return;
  8.  }
  9.     alert("pas de return" );
  10.  label1 = mesInfos[selection - 1]; // -1 car le select à une ligne bidon
  11.    alert("test1" );
  12.  pos_sep=label1.indexOf("||SEPARATION||",0);
  13.    alert("test2" );
  14.  label_chef=label1.substring(0,pos_sep);
  15.  label_alliance=label1.substring(label_chef.length+14,label1.length);
  16.  if(label_alliance=='') label_alliance='Aucune';
  17.  document.forms["formattaquer"].elements["chef"].value=label_chef;
  18.  document.forms["formattaquer"].elements["alliance"].value=label_alliance;
  19.     alert(label_alliance);
  20. }


 
J'ai mis des alertes pour savoir ce qui n'allait pas:
Je n'ai ni l'alert("test2" ) ni l'alert(label_alliance) qui passe.
Pourquoi le script se bloque t-il à alter("test2" ) ?

Reply

Marsh Posté le 18-10-2007 à 18:58:33   

Reply

Marsh Posté le 18-10-2007 à 20:11:33    

firebug pour debugguer fils :o
et sinon le top du top c'est de mettre des console.log(tadata) et hop c'eest bien mieux de coder du JS avec firebug, sinon tu es dans le caca d'avance

Reply

Marsh Posté le 19-10-2007 à 13:04:22    

Merci, je ne connaissais pas :)

Reply

Sujets relatifs:

Leave a Replay

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