[javascript/html/php]Problème Tableau html / Back IE

Problème Tableau html / Back IE [javascript/html/php] - HTML/CSS - Programmation

Marsh Posté le 28-08-2006 à 14:11:11    

Bonjour à tous,
 
Je suis débutant en html/javascript et j'ai un problème sur un tableau html sur lequel j'utilise des javascript pour rajouter des lignes.
 
En fait, j'ai une page formulaire.php qui me crée un tableau en html.
Au bout de chaque ligne, j'ai des instances du script suivant, qui me permettent de remettre les valeurs de la ligne à 0, dupliquer la ligne et ajouter une ligne vierge.
 

Code :
  1. <script type=\"text/javascript\">
  2. var idx = $z;
  3. function new_name(el) {
  4.     var s = el.getAttribute(\"name\" );
  5.     s = s.replace (/\d+/, idx);
  6.     el.setAttribute (\"name\", s);
  7. }
  8. function create_row(tr,duplicate) {
  9.     var tr2 = tr.cloneNode (true);
  10.     var list1 = tr.getElementsByTagName(\"select\" );
  11.     var list2 = tr2.getElementsByTagName(\"select\" );
  12.     idx++;
  13.     for (var i = 0; i < list1.length; i++) {
  14.         if (duplicate)
  15.             list2[i].selectedIndex = list1[i].selectedIndex;
  16.  if (!duplicate && list1[i].name.substr(0,5)!=\"jourc\" )
  17.             list2[i].selectedIndex = \" \";
  18.         new_name (list2[i]);
  19.     }
  20.     list1 = tr.getElementsByTagName(\"input\" );
  21.     list2 = tr2.getElementsByTagName(\"input\" );
  22.     for (i = 0; i < list2.length; i++) {
  23.        
  24.  if (! duplicate)
  25.             list2[i].value = \" \";
  26.  if (list1[i].value==\"oui\" )
  27.   list2[i].value = list1[i].value;
  28.         new_name (list2[i]);
  29.     }
  30.     var tbody = tr.parentNode;
  31.     tbody.insertBefore (tr2, tr.nextSibling);
  32. }
  33. function delete_row(tr) {
  34. var list1 = tr.getElementsByTagName(\"select\" );
  35. for (var i = 0; i < list1.length; i++) {
  36. if (list1[i].name.substr(0,5)!=\"jourc\" )
  37.         list1[i].selectedIndex = \" \";
  38. }
  39. var list1 = tr.getElementsByTagName(\"input\" );
  40. for (var i = 0; i < list1.length; i++) {
  41.  if (list1[i].name.substr(0,7)==\"comment\" )
  42.   list1[i].value = \" \";
  43.  if (list1[i].name.substr(0,6)==\"efface\" )
  44.   list1[i].checked = \"checked\";
  45. }
  46. }
  47. </script>


 
J'appelle ce script via ces commandes, au bout de chaque ligne du tableau:

Code :
  1. <a href=\"javascript:void(0)\" onclick=\"create_row(this.parentNode.parentNode,false)\">
  2. <IMG border='0' title='Ajouter' SRC='ajouter.gif' alt='+'></a>
  3. <a href=\"javascript:void(0)\" onclick=\"create_row(this.parentNode.parentNode,true)\">
  4. <IMG border='0' title='Dupliquer' SRC='dupliquer.gif' alt='d'></a>
  5. <a href=\"javascript:void(0)\" onclick=\"delete_row(this.parentNode.parentNode)\">
  6. <IMG border='0' title='Effacer' SRC='effacer.gif' alt='e'></a>


 
Le problème est que lorsque je valide ce formulaire, je fais des vérifications diverses sur le tableau. Dans l'hypothèse où l'une de ces vérifications s'est avérée négative, via un header je vais vers une page d'erreur et j'ai alors besoin de revenir au tableau via un back du navigateur.
Avec Firefox, pas de problème, les lignes ajoutées, dupliquées etc... s'affichent. Mais avec IE, toutes les lignes sur lesquelles javascript a été utilisé reviennent à leur état initial !
Je ne sais vraiment pas d'où cela vient, étant comme je vous l'ai dit un débutant en html, javascript.
Est-ce dû à un bug d'IE. Je pencherais plutôt pour un problème d'interpétation de mon code Javascript au retour sur le tableau, qui ne serait en fait pas exécuté par IE.
 
J'ai pas mal cherché sur le Web et sur ce forum, mais je n'ai pas trouvé de réponse satisfaisante.
 
Merci beaucoup pour votre aide.


Message édité par supelec2007 le 28-08-2006 à 14:13:30
Reply

Marsh Posté le 28-08-2006 à 14:11:11   

Reply

Marsh Posté le 28-08-2006 à 14:50:54    

Je crois que Firefox garde en mémoire la dernière page telle quelle ( donc avec les modifs) alors que IE rappelle la page depuis le serveur (donc sans les modifs)

Reply

Marsh Posté le 28-08-2006 à 15:10:36    

jbourdellon a écrit :

Je crois que Firefox garde en mémoire la dernière page telle quelle ( donc avec les modifs) alors que IE rappelle la page depuis le serveur (donc sans les modifs)


 
Tout d'abord, merci pour ta réponse.
 
En fait, je pensais comme toi que IE rappelait la page, mais ce qui m'étonne, c'est que si je renseigne des lignes de mon tableau qui ont été générées dès le début( i.e pas rajoutées via le javascript), en utilisant les menus déroulants, les cases à cocher, les zones de texte etc... et que je lance ensuite la validation et les vérifications, alors, lors de mon retour via un back, les données que j'ai rentré sont toujours présentes ! (i.e liste déroulant sélectionnée comme je l'avais laisée, zone de texte remplie xcomme je l'ai saisie etc...)
 
IE seraît il sélectif pour garder les infos dans sa mémoire ?  
Peut-on lui imposer de "conserver" les javascript ?
 
Merci

Reply

Marsh Posté le 28-08-2006 à 15:13:26    

Ben disons qu'a mon avis la page précédente pour IE c'est la page AVEC les champs du form remplis  
 
Pour ce qui est de "conserver le javascript" étant donné que tu modifie le code html de la page , et qu'aucune copie ou sauvegarde n'est effectuée je crois que ca va pas être possible

Reply

Marsh Posté le 28-08-2006 à 15:28:56    

sur ce genre de problème, il devient généralement nécessaire de faire ta validation et tes verifications via un xmlHttpRequest. Ainsi tu ne changes pas de page et tu gardes les modifications effecutées dans ta page via du js.
 
Par ailleurs:

Code :
  1. href="javascript:void(0)" onclick="create_row(this.parentNode.parentNode,false)"


c'est pas terrible il vaut mieux faire:

Code :
  1. href="" onclick=" return create_row(this.parentNode.parentNode,false)"


sans oublier d'ajouter un return false dans ta fonction create_row

Reply

Marsh Posté le 28-08-2006 à 15:47:41    

J'ai regardé vite fait le xmlHttpRequest, ça n'a pas l'air évident pour un débutant comme moi.
 
Est-ce que tu ne penses pas qu'il serait possible de s'en tirer avec une pop-up ou autre ?
En fait, quand je valide ma page, je vais via le formulaire vers une page de traitement qui vérifie les données et interragit avec ma base de données si tout est OK, puis j'affiche une page qui est générée via un header.  
Il faudrait donc que ma page de traitement se fasse dans une pop-up et si tout est ok, afficher ma page finale dans la fenêtre principale.
 
Tu crois que ça pourrait marcher ?
Je sais pas trop comment faire, surout pour revenir dans la fenêtre principale t fermer automatiquement la pop-up.


Message édité par supelec2007 le 28-08-2006 à 17:10:35
Reply

Sujets relatifs:

Leave a Replay

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