Ajout de ligne dans un tableau en ajax [Résolu]

cs_f6xara 68 Messages postés samedi 1 novembre 2003Date d'inscription 6 février 2008 Dernière intervention - 30 juin 2006 à 10:32 - Dernière réponse : oosenseioo 1 Messages postés dimanche 31 décembre 2000Date d'inscription 20 décembre 2011 Dernière intervention
- 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.
Afficher la suite 

8 réponses

Répondre au sujet
PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention - 30 juin 2006 à 14:43
+3
Utile
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)













 
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de PetoleTeam
PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention - 30 juin 2006 à 13:25
0
Utile
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)
Commenter la réponse de PetoleTeam
PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention - 30 juin 2006 à 13:35
0
Utile
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...
Commenter la réponse de PetoleTeam
cs_f6xara 68 Messages postés samedi 1 novembre 2003Date d'inscription 6 février 2008 Dernière intervention - 30 juin 2006 à 13:58
0
Utile
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 :)
Commenter la réponse de cs_f6xara
cs_f6xara 68 Messages postés samedi 1 novembre 2003Date d'inscription 6 février 2008 Dernière intervention - 30 juin 2006 à 15:19
0
Utile
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
Commenter la réponse de cs_f6xara
PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention - 30 juin 2006 à 15:59
0
Utile
???

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)
Commenter la réponse de PetoleTeam
MissRosee 1 Messages postés vendredi 24 avril 2009Date d'inscription 24 avril 2009 Dernière intervention - 24 avril 2009 à 13:35
0
Utile
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
Commenter la réponse de MissRosee
oosenseioo 1 Messages postés dimanche 31 décembre 2000Date d'inscription 20 décembre 2011 Dernière intervention - 20 déc. 2011 à 12:21
0
Utile
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){
Commenter la réponse de oosenseioo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.