onChange fonctionne sous Firefox mais pas IE...

onChange fonctionne sous Firefox mais pas IE... - HTML/CSS - Programmation

Marsh Posté le 03-07-2006 à 17:39:49    

Bonjour,  
 
Voilà dans un formulaire, j'ai une liste déroulante. Suivant le choix qu'on fait dans cette première liste une seconde liste doit s'ouvrir. Or cette seconde liste s'affiche bien sous Firefox mais pas sous Internet Explorer... Et je ne comprends vraiment pas pourquoi... Les mots figurant dans les listes se trouvent dans une base SQL.  
Ca c'est le code concernant ces deux listes figurant dans mon formulaire :  
 

Code :
  1. <select name="theme" size="1" onChange="genereSousTheme(this.value)">
  2.     <option selected></option>
  3.     <? genereListeThemes(); ?>
  4.   </select>
  5.   <select name="sousTheme" size="1" style="<?= $styleSousTheme ?>">
  6.     <option></option>
  7. </select>


 
Après est-ce que ça vient du fichier ajax (d'ailleurs si vous pouviez me dire ce que c'est que ça ?) qui a cette tête là :  
 

Code :
  1. <?php
  2. header('Content-type: text/html; charset=iso-8859-1');
  3. include '../../php/dbconnect.inc.php';
  4. if (isset($_GET['theme'])) {
  5. $theme = utf8_decode($_GET['theme']);
  6. $sql = "SELECT sousTheme FROM formation_themes WHERE theme = '$theme' ORDER BY sousTheme";
  7. $req = mysql_query($sql);
  8. while ($data = mysql_fetch_object($req)) {
  9.  echo '|'.$data->sousTheme;
  10. }
  11. }
  12. flush();
  13. ?>


 
Je suis perdue... Merci de votre aide...


Message édité par loulipo le 03-07-2006 à 17:40:10
Reply

Marsh Posté le 03-07-2006 à 17:39:49   

Reply

Marsh Posté le 03-07-2006 à 17:44:27    

manque plein de bout de code, particulièrement le js ... on peut pas grand chose là [:spamafote]

Reply

Marsh Posté le 04-07-2006 à 10:57:47    

En fait je pense que tout est fait en php... Voilà le formulaire complet :  
 

Code :
  1. <?php
  2. /* securité */
  3. $domaine = 'formations';
  4. include '../droits.inc.php';
  5. include '../../php/dbconnect.inc.php';
  6. $message = '';
  7. $action = $_GET['action'];
  8. $id = $_GET['id'];
  9. if (
  10. isset($_POST['theme']) && ($action == 'insert' || $action == 'update')
  11. ) {
  12. $theme = $_POST['theme'];
  13. if (isset($_POST['sousTheme'])) $sousTheme = $_POST['sousTheme'];
  14. else $sousTheme = '';
  15. if (isset($_POST['duree'])) $duree = $_POST['duree'];
  16. else $duree = '';
  17. if (isset($_POST['periodicite'])) $periodicite = $_POST['periodicite'];
  18. else $periodicite = '';
  19. if (isset($_POST['ad'])) $ad = $_POST['ad'];
  20. else $ad = '';
  21. if (isset($_POST['region'])) $region = $_POST['region'];
  22. else $region = '';
  23. if (isset($_POST['description'])) $description = $_POST['description'];
  24. else $description = '';
  25. if (isset($_POST['public'])) $public = $_POST['public'];
  26. else $public = '';
  27. if (isset($_POST['outils'])) $outils = $_POST['outils'];
  28. else $outils = '';
  29. if (isset($_POST['contact'])) $contact = $_POST['contact'];
  30. else $contact = '';
  31. if (isset($_POST['jourDebut'])) $jourDebut = $_POST['jourDebut'];
  32. else $jourDebut = '';
  33. if (isset($_POST['moisDebut'])) $moisDebut = $_POST['moisDebut'];
  34. else $moisDebut = '';
  35. if (isset($_POST['anneeDebut'])) $anneeDebut = $_POST['anneeDebut'];
  36. else $anneeDebut = '';
  37. if (isset($_POST['jourFin'])) $jourFin = $_POST['jourFin'];
  38. else $jourFin = '';
  39. if (isset($_POST['moisFin'])) $moisFin = $_POST['moisFin'];
  40. else $moisFin = '';
  41. if (isset($_POST['anneeFin'])) $anneeFin = $_POST['anneeFin'];
  42. else $anneeFin = '';
  43. if (empty($jourDebut))
  44.  $jourDebut = '00';
  45. if (strlen($jourDebut) == 1)
  46.  $jourDebut = '0'.$jourDebut;
  47. if (strlen($moisDebut) == 1)
  48.  $moisDebut = '0'.$moisDebut;
  49. if (strlen($anneeDebut) == 1)
  50.  $anneeDebut = '0'.$anneeDebut;
  51. $dateDebut = '20'.$anneeDebut.'-'.$moisDebut.'-'.$jourDebut;
  52. if (empty($jourFin))
  53.  $jourFin = '00';
  54. if (strlen($jourFin) == 1)
  55.  $jourFin = '0'.$jourFin;
  56. if (strlen($moisFin) == 1)
  57.  $moisFin = '0'.$moisFin;
  58. if (strlen($anneeFin) == 1)
  59.  $anneeFin = '0'.$anneeFin;
  60. $dateFin = '20'.$anneeFin.'-'.$moisFin.'-'.$jourFin;
  61. if ($action == 'insert') {
  62.  $sql = "INSERT INTO formation_fiches VALUES('', '$theme', '$sousTheme', '$dateDebut',
  63.  '$dateFin', '$duree', '$periodicite', '$ad', '$region', '$description', '$public',
  64.  '$outils', '$contact')";
  65.  mysql_query($sql) or die("<h1>Erreur INSERT.</h1>" );
  66. } else if ($action == 'update' && !empty($id)) {
  67.  if ($_POST['detruire'] == 'detruire') {
  68.   mysql_query("DELETE FROM formation_fiches WHERE id = '$id'" )
  69.   or die ("erreur delete" );
  70.   echo '<meta http-equiv="refresh" content="0;URL=admin.php">';
  71.   exit();
  72.  }
  73.  $sql = "UPDATE formation_fiches SET theme = '$theme', sousTheme = '$sousTheme',
  74.  dateDebut = '$dateDebut', dateFin = '$dateFin', duree = '$duree',
  75.  periodicite = '$periodicite', ad = '$ad', region = '$region', description = '$description',
  76.  public = '$public', outils = '$outils', contact = '$contact'
  77.  WHERE id = '$id'";
  78.  mysql_query($sql) or die("<h1>Erreur UPDATE.</h1>" );
  79. }
  80. $message = "<p><b>".$action." réussi</b></p>";
  81. }
  82. // date par défault
  83. $moisDebut =  date('m');
  84. $anneeDebut =  date('y');
  85. $moisFin =  date('m');
  86. $anneeFin =  date('y');
  87. /* variables de la fiche */
  88. if ($action == 'update' && !empty($id)) {
  89. $sql = "SELECT * FROM formation_fiches WHERE id='$id'";
  90. $result = mysql_query($sql) or die("<h1>ERREUR SELECT</h1>" );
  91. while ($row = mysql_fetch_object($result)) {
  92.  // champs obligatoires
  93.  $theme = $row->theme;
  94.  $description = $row->description;
  95.  $dateDebut = $row->dateDebut;
  96.  $dateFin = $row->dateFin;
  97.  // champs facultatifs
  98.  if (isset($row->sousTheme)) $sousTheme = $row->sousTheme;
  99.  else $sousTheme = '';
  100.  if (isset($row->duree)) $duree = $row->duree;
  101.  else $duree = '';
  102.  if (isset($row->periodicite)) $periodicite = $row->periodicite;
  103.  else $periodicite = '';
  104.  if (isset($row->ad)) $departement = $row->ad;
  105.  else $departement = '';
  106.  if (isset($row->region)) $region = $row->region;
  107.  else $region = '';
  108.  if (isset($row->public)) $public = $row->public;
  109.  else $public = '';
  110.  if (isset($row->outils)) $outils = $row->outils;
  111.  else $outils = '';
  112.  if (isset($row->contact)) $contact = $row->contact;
  113.  else $contact = '';
  114.  // transformation des dates
  115.  preg_match('/([[:digit:]]{2})([[:digit:]]{2})-([[:digit:]]{2})-([[:digit:]]{2})/',$dateDebut,$reg);
  116.  if ($reg[4] == '00') $jourDebut = '';
  117.  else $jourDebut = $reg[4];
  118.  $moisDebut = $reg[3];
  119.  $anneeDebut = $reg[2];
  120.  preg_match('/([[:digit:]]{2})([[:digit:]]{2})-([[:digit:]]{2})-([[:digit:]]{2})/',$dateFin,$reg);
  121.  if ($reg[4] == '00') $jourFin = '';
  122.  else $jourFin = $reg[4];
  123.  $moisFin = $reg[3];
  124.  $anneeFin = $reg[2];
  125. }
  126. } else {
  127.  $theme = '';
  128.  $description = '';
  129.  $sousTheme = '';
  130.  $duree = '';
  131.  $periodicite = '';
  132.  $departement = '';
  133.  $region = '';
  134.  $public = '';
  135.  $outils = '';
  136.  $jourDebut = '';
  137.  $jourFin = '';
  138.  $contact = '';
  139. }
  140. function genereListeThemes() {
  141. $sql = "SELECT theme FROM formation_themes GROUP BY theme ORDER BY theme";
  142. $result = mysql_query($sql);
  143. while ( $data = mysql_fetch_object($result) ) {
  144.  global $theme;
  145.  if ($data->theme == $theme)
  146.   $theme_selected = ' selected';
  147.  else $theme_selected = '';
  148.  echo '
  149.  <option'.$theme_selected.'>'.$data->theme.'</option>';
  150. }
  151. }
  152. function genereListeRegion() {
  153. $t_regions = array(
  154.  'National','Alsace', 'Aquitaine', 'Auvergne', 'Basse-Normandie', 'Bourgogne',
  155.  'Bretagne', 'Centre', 'Champagne-Ardenne', 'DOM', 'Franche-Comté',
  156.  'Haute-Normandie', 'Ile-de-France', 'Languedoc-Roussillon', 'Limousin',
  157.  'Lorraine', 'Midi-Pyrénées', 'Nord-Pas-de-Calais',
  158.  'Pays de la Loire', 'Picardie', 'Poitou-Charentes', 'PACA', 'Rhône-Alpes'
  159.         );
  160. foreach($t_regions as $v_region) {
  161.  global $region;
  162.  if ($v_region == $region)
  163.   $region_selected = ' selected';
  164.  else $region_selected = '';
  165.  echo '
  166.  <option'.$region_selected.'>'.$v_region.'</option>';
  167. }
  168. }
  169. function genereListeAD() {
  170. global $departement;
  171. $sql = "SELECT departement FROM assosDepartementales WHERE ADouGL = 'AD' ORDER BY departement";
  172. $result = mysql_query($sql);
  173. while ( $data = mysql_fetch_object($result) ) {
  174.  if ($data->departement == $departement)
  175.   $departement_selected = ' selected';
  176.  else $departement_selected = '';
  177.  echo '
  178.  <option'.$departement_selected.'>'.$data->departement.'</option>';
  179. }
  180. }
  181. /*
  182. * la variable $ecrireOnLoad permet d'écrire dans  
  183. * la balise <body> du fichier htmlHautPage.inc.php
  184. * le thème est toujours rempli sur une fiche à updater donc on appel toujours genereSousTheme()
  185. * si le sousTheme est rempli, il faut appeler genereSousSousTheme()
  186. */
  187. $appel_javascript = " genereSousTheme('$theme','onLoad');";
  188. $ecrireOnLoad = " onLoad=\"$appel_javascript\"";
  189. include '../htmlHautPage.inc.php';
  190. ?>
  191. <script type="text/javascript">
  192. function ajax(cible,event) {
  193. var xmlhttp = false;
  194. // Compilation conditionnelle d'IE
  195. /*@cc_on
  196. @if (@_jscript_version >= 5)
  197.  try {
  198.   xmlhttp = new ActiveXObject("Msxml2.XMLHTTP" );
  199.  } catch (e) {
  200.   try {
  201.    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP" );
  202.   } catch (E) {
  203.    xmlhttp = false;
  204.   }
  205.  }
  206. @else
  207.  xmlhttp = false;
  208. @end @*/
  209. // on essaie de créer l'objet si ce n'est pas déjà fait
  210. if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
  211.  try {
  212.   xmlhttp = new XMLHttpRequest();
  213.  } catch (e) {
  214.   xmlhttp = false;
  215.  }
  216. }
  217. if (xmlhttp) {
  218.   // on définit ce qui doit se passer quand la page répondra
  219.   xmlhttp.onreadystatechange = function() {
  220.     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
  221.       // Traitement de la réponse.
  222.       tableauResultats = xmlhttp.responseText.split("|" );
  223.       document.getElementsByName(cible)[0].innerHTML = "";
  224.       for ( i in tableauResultats ) {
  225.  // on regarde si il faut ajouter l'attribut selected au chargement de la page
  226.  if ( event == 'onLoad' && tableauResultats[i] == '<?= $sousTheme ?>')
  227.   elem = new Option(tableauResultats[i],tableauResultats[i],false,true);
  228.  else elem = new Option(tableauResultats[i],tableauResultats[i],false,false);
  229.  document.getElementsByName(cible)[0].appendChild(elem);
  230.  if (tableauResultats.length > 2) document.getElementsByName(cible)[0].style.display="";
  231.  else document.getElementsByName(cible)[0].style.display="none";
  232.       }
  233.     }
  234.   }
  235. }
  236. return xmlhttp;
  237. }
  238. function call_ajax(url,cible,event){
  239. var xmlhttp = ajax(cible,event);
  240. xmlhttp.open("GET", url,true);
  241. xmlhttp.send(null);
  242. }
  243. function genereSousTheme(theme,event) {
  244. /*
  245.  * lorsque le thème est choisi, on affiche le menu sousTheme
  246.  */
  247. if (theme != "" ) {
  248.  // utilisation de XMLHttpRequest pour mettre à jour le sousTheme
  249.  url = "ajax.php?theme=" + encodeURIComponent(theme);
  250.  call_ajax(url,"sousTheme",event);
  251. } else {
  252.  document.getElementsByName("sousTheme" )[0].style.display="none";
  253. }
  254. }
  255. function addzero(nombre) {
  256. // si la case est vide on met 00
  257. if (nombre.length == 0) nombre = "00";
  258. // si il n'y a qu'un chiffre, on place un zéro avant
  259. else if (nombre.length == 1) nombre = "0" + nombre;
  260. return nombre;
  261. }
  262. function verifierDates() {
  263. /*
  264. on concatène annee, mois, jour dans un string
  265. et on compare les strings :
  266. si date de début est supérieure date de fin
  267. on signale une erreur
  268. la fonction addzero gère les entrées vide ou les nombres à un seul chiffre
  269. qui pourraient fausser la comparaison
  270. */
  271. jourDebut = addzero(document.getElementsByName('jourDebut')[0].value);
  272. moisDebut = addzero(document.getElementsByName('moisDebut')[0].value);
  273. anneeDebut = addzero(document.getElementsByName('anneeDebut')[0].value);
  274. dateYMDdebut = anneeDebut + moisDebut  + jourDebut;
  275. jourFin = addzero(document.getElementsByName('jourFin')[0].value);
  276. moisFin = addzero(document.getElementsByName('moisFin')[0].value);
  277. anneeFin = addzero(document.getElementsByName('anneeFin')[0].value);
  278. dateYMDfin = anneeFin + moisFin + jourFin;
  279. if (dateYMDdebut > dateYMDfin) return false;
  280. else return true;
  281. }
  282. function verifierAvantEnvoi() {
  283. // si cette fonction retourne false, le formulaire n'est pas envoyé
  284. var drapeau = true;
  285. var listeErreurs = "Erreurs :\n";
  286. var champsObligatoires = new Array(
  287.   'theme',
  288.   'moisDebut',
  289.   'anneeDebut',
  290.   'moisFin',
  291.   'anneeFin',
  292.   'description'
  293.  );
  294. if (drapeau == false) {
  295.  alert(listeErreurs);
  296.  return false;
  297. }
  298. if (!verifierDates()) {
  299.  alert("Erreur : la date de début ne peut pas être supérieure à celle de fin" );
  300.  return false;
  301. }
  302. return true;
  303. }
  304. </script>
  305. <style type="text/css">
  306. fieldset {
  307. padding: 1em;
  308. font-weight: bold;
  309. }
  310. fieldset br {
  311. clear: both;
  312. }
  313. label {
  314. display: inline;
  315. float: left;
  316. width: 130px;
  317. font-weight: bold;
  318. }
  319. label, input, textarea, select {
  320. margin-bottom: 1em;
  321. }
  322. </style>
  323. <?= $message ?>
  324. <p><a href="admin.php">Retour</a></p>
  325. <form action="fiches.php?action=<?= $action ?>&id=<?= $id ?>" method="post" onSubmit="return verifierAvantEnvoi()">
  326. <fieldset>
  327. <legend>Fiche de saisie</legend>
  328. <label for="theme">Indexation</label>
  329.   <select name="theme" size="1" onChange="genereSousTheme(this.value)">
  330.     <option selected></option>
  331.     <? genereListeThemes(); ?>
  332.   </select>
  333.   <select name="sousTheme" size="1" style="<?= $styleSousTheme ?>">
  334.     <option></option>
  335. </select>
  336. <br/>
  337. <label for="jourDebut">Date de début de la formation</label>
  338. <input type="text" name="jourDebut" value="<?= $jourDebut ?>" size="2" maxlength="2"/>
  339. <input type="text" name="moisDebut" value="<?= $moisDebut ?>" size="2" maxlength="2"/>
  340. <input type="text" name="anneeDebut" value="<?= $anneeDebut ?>" size="2" maxlength="2"/>
  341. <br/>
  342. <label for="jourFin">Date de fin de la formation</label>
  343. <input type="text" name="jourFin" value="<?= $jourFin ?>" size="2" maxlength="2"/>
  344. <input type="text" name="moisFin" value="<?= $moisFin ?>" size="2" maxlength="2"/>
  345. <input type="text" name="anneeFin" value="<?= $anneeFin ?>" size="2" maxlength="2"/>
  346. <br/>
  347. <label for="duree">Durée</label>
  348. <input type="text" name="duree" value="<?= $duree ?>" size="50" maxlength="50"/>
  349. <br/>
  350. <label for="periodicite">Périodicité</label>
  351. <input type="text" name="periodicite" value="<?= $periodicite ?>" size="50" maxlength="50"/>
  352. <br/>
  353. <label for="ad">AD</label>
  354. <select name="ad">
  355.  <option></option>
  356.  <? genereListeAD(); ?>
  357. </select>
  358. <br/>
  359. <label for="region">Région</label>
  360. <select name="region">
  361.  <option></option>
  362.  <? genereListeRegion(); ?>
  363. </select>
  364. <br/>
  365. <label for="description">Description</label>
  366.         <textarea name="description" cols="70" rows="5"><?= $description ?></textarea>
  367. <br/>
  368. <label for="public">Public</label>
  369.         <textarea name="public" cols="70" rows="5"><?= $public ?></textarea>
  370. <br/>
  371. <label for="outils">Outils</label>
  372.         <textarea name="outils" cols="70" rows="5"><?= $outils ?></textarea>
  373. <br/>
  374. <label for="contact">Information de contact</label>
  375.         <textarea name="contact" cols="70" rows="5"><?= $contact ?></textarea>
  376. <br/>
  377. <input type="submit" value="ok" class="boutonBleu"/>
  378. <?
  379. if ($action == 'update') {
  380. echo '
  381. <br/>
  382. <br/>
  383. <br/>
  384. <input type="submit" name="detruire" value="detruire" class="boutonRouge"/>
  385. ';
  386. }
  387. ?>
  388. </fieldset>
  389. </form>
  390. </div>
  391. </body>
  392. </html>
  393. <?
  394. mysql_close();
  395. ?>


 

Reply

Marsh Posté le 11-07-2006 à 09:43:52    

up ça me fait pareil, le Onchange ne passe pas sous IE mais sur FireFox c'es bon.
 
Je voudrais qu'en cliquant sur un élément d'une liste déroulante A , j'affiche une autre liste déroulante B et quand je sélectionne un autre élément de A, j'affiche une autre liste déroulante C.
 
Pour la liste A par exemple :
 

Code :
  1. <select size="1" name="choix_diplome" id="A" onChange="display_or_not();">


 
 
 
 
Et ma fonction JavaSCript :
 

Code :
  1. <SCRIPT language="Javascript">
  2. function display_or_not(){
  3. if (document.getElementById("A" ).value == "G.E.A." ){
  4.     document.getElementById("B" ).style.visibility = "visible";
  5. } else {
  6.     document.getElementById("B" ).style.visibility = "hidden";
  7.   }
  8.   if (document.getElementById("A" ).value == "Q.L.I.O." ){
  9.     document.getElementById("C" ).style.visibility = "visible";
  10. } else {
  11.     document.getElementById("C" ).style.visibility = "hidden";
  12.   }
  13. }
  14. </script>


 
 
 

Reply

Sujets relatifs:

Leave a Replay

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