Ajout de ligne dans un tableau en ajax

Résolu
cs_f6xara Messages postés 68 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 6 février 2008 - 30 juin 2006 à 10:32
oosenseioo Messages postés 1 Date d'inscription dimanche 31 décembre 2000 Statut Membre Dernière intervention 20 décembre 2011 - 20 déc. 2011 à 12:21
Bonjour,
Voilà j'ai un problème sous IE seulement (sous firefox ça marche bien)

J'ai fais une centrale de réservations en Ajax. Lors de l'ajout d'une prestation, j'ajoute une ligne à mon tableau HTML en javascript et charge son contenu en Ajax en fonction des critères déjà saisis.

Le problème sous IE c'est qu'il me créé bien mon TR mais pas les TD.

voici la fonction
function addRow(){
    if(testValue(LastRow)===true){
        tab = document.getElementById("tab_centrale_resa");
        tab.insertRow(1);
        var ligne = tab.rows[1];
        ligne.setAttribute("id","id_"+LastRow);
        tab.appendChild (ligne);
        // chargement en ajax       
        var myAjax = new Ajax("id_"+LastRow, "AJAX_reservation.php",  "id="+LastRow });
        LastRow++;
        document.getElementById('nbRows').value = LastRow;
    }else{
        alert('Veuillez remplir complétement les informations avant de rentrer une nouvelle réservation');
    }
}

Cette fonction remplace l'attribut id="" (ici "id_"+LastRow) par le contenu du fichier retourné par ajax
Ici je retourne <td>....</td><td>.....</td> puisque le TR est créé avant.

Mais celà ne marche pas. Alors faudrait-il que je créé chaque TD et que mon Ajax me retourne chaque cellule ou y a un moyen de finaliser ça pour IE sachant que sur les autres navigateurs, il n'y a pas de problèmes.

8 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
30 juin 2006 à 14:43
Y A 1 PLEMB...



Effectivement si FireFox accepte le innerHTML sur un <TR> exemple





ligne = tab.rows[1];
ligne.innerHTML = "<TD>Colonne 1</TD><TD>Colonne 2</TD>";
il y a effectivement création de 2 colonnes  CA c'est Bien...

Sous IE malheureusement le innerHTML ne fonctionne pas de la même façon est les deux colonnes ne sont pas crées...
pour arriver à tes fins il te faut créer les cellules  à la mano...

var NbCol = tab.rows[0].cells.length; // Ref. 1st Ligne




tab.insertRow(1);



ligne = tab.rows[1];
ligne.setAttribute("id","id_"+LastRow);







for( var i=0; i< NbCol; i++){
  ligne. insertCell (i);
  ligne.cells[i].innerHTML = "Ligne " + i;






// par exemple








}

Donc il te faut modifier la méthode d'écriture des cellules la méthode en bleu étant compatible FireFox IE...







;0)













 
3
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
30 juin 2006 à 13:25
B

onjour...

Je ne connais pas AJAX, sauf celui qui lave plus blanc...etc... mais mets des alert pour voir ce qui ce passe après appendchild...



var tab  = document.getElementById("tab_centrale_resa");


var ligne;








alert("Nb Ligne en Entrée = " +tab.rows.length);






tab.insertRow(1);




ligne = tab.rows[1];
ligne.setAttribute("id","id_"+LastRow);
alert("Nb Ligne Avant = " +tab.rows.length);
tab.appendChild( ligne);
alert("




Nb Ligne





Apres = " +tab.rows.length);


je suis navré mais elle n'y est plus...



;0)
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
30 juin 2006 à 13:35
J'en oublie de dire que appendChild est liée par exemple à createElement() ou plus généralement en fin truc qui create...
comme aussi createTextNode entre autres...
0
cs_f6xara Messages postés 68 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 6 février 2008
30 juin 2006 à 13:58
Pour les alertes, j'obtiens bien
alert 1 : Nb Ligne en Entrée = 1

alert 2 : Nb Ligne en Entrée = 2

alert 1 : Nb Ligne en Entrée = 1

quand je fais une alert sur ligne, j'obtiens [objet HTMLtableRowElement]

voici plus précisément le déroulement de mon problème, ca aidera peut etre plus :)

en html je créé un tableau
titre, texte

après en javascript, je rajoute après la 1ère ligne une nouvelle ligne avec un id ce qui donne une fois le code généré

titre, texte

enfin

Je remplace le contenu de "monid" par la source d'un fichier appelé à ce moment contenant <td>blabla</td><td>blablabla</td>

Sous firefox, aucun problème, tout se déroule ainsi (j'ai l execution pas à pas)

Sous IE, il me créé bien mon <tr></tr> mais apparemment n'accepte pas que je le remplisse diretement avec lesTD dans un TR vide. Il faudrait alors je pense créé tous les td en javascript et pour chaque javascript, chargé le contenu dynamique, mais ça me pause pas mal de problème sur le découlement des actions par la suite et les vérifications en ajax (moi je dis ajax mais c est XMLHTTPREQUEST je crois :) )

Alors franchement je sèche un peu :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_f6xara Messages postés 68 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 6 février 2008
30 juin 2006 à 15:19
Bon j'ai testé ce que tu m'as dis, ça marche mais soulève pas mal de problème sur le fonctionnement général du module, donc j'ai fais d'une autre facon (beaucoup moins bien et moins belle mais ça marche), au lieu de crééer une ligne a chaque fois, je recréé tout le tableau... c'est pas super je sais :)

Merci encore
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
30 juin 2006 à 15:59
???

pourquoi à partir de la ligne tu ne récupéres pas les champs












var szTmp = Text; 



// Ta ligne récupérée...


<td>blabla</td><td>blablabla</td>





var NbCar  = szTmp.length;





var Deb  = 0;         // position de <TD>au début
var Fin;      



         // position de </TD>en fin




var i =0;
while( Deb > -1){
  Fin  = szTmp.indexOf( '</td>');




 




ligne.cells[i].innerHTML = szTmp.substring( Deb+4, Fin); // Résultat dans cellules
  szTmp = szTmp.substr( Fin +5, NbCar);                       // Tronque chaine de référence





  Deb = szTmp.indexOf( '<td>');





}

Ca c'est plus FUN...






;0)
0
MissRosee Messages postés 1 Date d'inscription vendredi 24 avril 2009 Statut Membre Dernière intervention 24 avril 2009
24 avril 2009 à 13:35
Bonjour
je connais pas grand chose sur ajax et j'aimerai faire le meme truc alors si possible vous pouvez me filer le code(si vous l'avez encore) ou plus d'explication (les variables LastRow,nbRows,id_.. je sais pas ou je les déclare)
Merci d'avance
0
oosenseioo Messages postés 1 Date d'inscription dimanche 31 décembre 2000 Statut Membre Dernière intervention 20 décembre 2011
20 déc. 2011 à 12:21
je viens de tomber sur ton code c'est peu etre trop tard mais ça sert à quoi ton truc en rouge là? lol

voici la fonction
function addRow(){
if(testValue(LastRow)===
true){
0
Rejoignez-nous