Pb tableau dynamique

Résolu
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 - 14 sept. 2006 à 09:16
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 - 18 sept. 2006 à 08:28
Bonjour,

J'aimerais créer un tableay dynamique, c'est-à-dire un tableau sans lignes au départ, dans lequel on peut rajouter des lignes vides et écrire dans les cases.

J'ai cherché sur le site et je suis tombé sur des post de forum et sources (notamment une source de Bultez), et je m'en suis inspirée.
Seulement je rencontre des petits problèmes. J'ai trouvé plusieurs codes plus ou moins compliqués, et j'ai donc essayer de faire simple (au cas où quelqu'un retouche après moi) :

<script language="javascript1.3">
            var nbLignes = 0;
           
            function AjoutLigne()
            {
                var nbCellules = 0;
                var newCell;
                nbLignes ++;

                var newRow = document.getElementById('tabFacture').insertRow(-1);
               
                for(nbCellules=0 ; nbCellules<7 ; nbCellules++)
                {
                    newCell = newRow.insertCell(nbCellules);
                    document.getElementById('tabFacture').rows[nbLignes].cells[nbCellules].innerHTML = 'a';
                    document.getElementById('tabFacture').rows[nbLignes].cells[nbCellules].ondblclick = function(){document.getElementById('tabFacture').rows[nbLignes].cells[nbCellules].innerHTML = '';}
                }
            }
</script>
........................
[# Ajouter un repère]
Désignation des ouvrages |Qte |Qte
posée
|P.U.HT
?
|P.T.H.T
?
|%
Fté
|TOTAL
FTE ?
|

En fait, la ligne en rouge pose problème. Je voulais ajouter une fonction sur chaque case quand on double clique dessus (pour laisser apparaître un champ texte permettant de modifier la case), mais en fait il me dit que  document.getElementById('tabFacture').rows[nbLignes].cells[nbCellules] n'a pas de propriétés, alors que je l'ai utilisé dans la ligne d'avant pour ajouter les 'a' dans les cellules !!

Quelqu'un voit ce que j'ai fais de travers ?? Sinon est-ce que je m'y prends bien ou j'utilise pas la bonne méthode pour faire ce que je souhaite ??

En attendant des réponses de votre part (merci d'ailleurs pour les réponses), je continue de chercher

35 réponses

cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
14 sept. 2006 à 14:15
Ben mettre directement un input text peut inciter la personne à aller modifier, on veut éviter ça ! C'est un peu une sécurité en gros ... Enfin c'est assez spécial lol Et puis bon, c'est plus joli que d'avoir plein d'input text :p

Bon allez me reste encore le fait de mettre le focus quand on double-clique et puis ça sera top :) Bon après il reste plein de choses à faire m'enfin lol
0
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
14 sept. 2006 à 14:26
Pour le focus j'ai fais :

document.getElementById('tabFacture').rows[nbLignes].cells[nbCellules].ondblclick  = function (){quoi=this;this.innerHTML = '';document.getElementById('saisie').focus();}

C'est correct ou c'est définir un id pour rien parce que d'autres solutions existent ? (en tout cas ça marche :p)
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
14 sept. 2006 à 14:30
>>mettre directement un input text peut inciter la personne à aller modifier, on veut éviter ça !
1° tel que c'est fait, rien n'empêche de refaire un double click...
   il faut donc invalider le double click une fois fait.
2° et on n'a donc pas le droit aux erreurs en saisie ?
   très contraignant.

>>c'est plus joli que d'avoir plein d'input text
plus joli ? à l'oeil, à la vue  ?
( car si c'est autre chose je ne suis pas d'accord du tout ! )
il suffit de mettre un style associé à l'input text, ce sera
beaucoup plus simple, et javascript inutile !

mais chacun fait comme il l'entend,
et les vaches seront bien gardées.
<hr />
            cordialement   Bul    mon Site    M'écrire<hr />
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
14 sept. 2006 à 14:33
quand à la dernière question :
tu as testé avec plusieurs lignes ajoutées ?
un ID doit être unique dans une page.
<hr />
   cordialement   Bul    mon Site    M'écrire<hr />
0

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

Posez votre question
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
14 sept. 2006 à 14:37
C'est pas ce que j'ai voulu dire.
Bien sûr que les erreurs de saisies sont autorisées ! C'est juste que pour la personne qui va l'utiliser, ça lui donnera l'impression que ça a été pris en compte. Enfin je sais pas trop comment t'expliquer, désolée. C'est juste pour son impression à elle, puisqu'une fois que certaines cases sont saisies, d'autres se calculent automatiquement, ça donne plus l'impression que sa saisie est prise en compte et ses calculs sont générés. C'est juste histoire de rendre la chose plus sympa (mais en même temps, je te l'accorde, tout le monde ne trouve pas forcément ça sympa lol).
C'est aussi pour que certaines personnes qui vont le modifier a un moment donné n'ait pas peur de tous ces input en se disant "ola faut faire attention à pas se trompé de cases !", des trucs dans le genre...
Et de toute manière, j'ai besoin du javascript pour recalculer certaines cases à chaque fois ...

Mais merci de tes remarques, tes explications et ton aide :)
0
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
14 sept. 2006 à 14:39
quand à la dernière question :
tu as testé avec plusieurs lignes ajoutées ?
un ID doit être unique dans une page.


J'ai testé et ça fonctionne puisque l'input n'existe plus une fois qu'on sort de la case, l'id aussi n'existe plus non ?? En tout cas ça fonctionne bien, et je pense pas qu'il y ait deux fois le même id si le input n'existe plus, mais là j'avoue j'ai un gros doute en disant ça :p
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
14 sept. 2006 à 14:53
>>puisque l'input n'existe plus une fois qu'on sort de la case

ouais... peut-être...
faudrait voir tous les cas de figures  et par navigateurs

>>tes remarques...
c'était mon avis, qui ne vaut que ce qu'il vaut : c'est à dire rien.
je n'aurais pas fait les choses comme ça, trop de complications
pour un résultat quasi inutile, même complètement :
jouer simplement avec le style donnerait le même résultat.
mais ce n'est  que mon avis encore une fois, et il ne faut
absolument pas en tenir compte.
si cela convient... nickel.
<hr />
            cordialement   Bul    
mon Site
    
M'écrire

<hr />
0
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
14 sept. 2006 à 15:35
A vrai dire avant que tu n'en parles, je n'avais pas pensé à ça comme ça. C'est sur ça aurait sûrement été plus simple !!
M'enfin, maintenant que l'autre personne a vu ça, je suis sure qu'elle voudra pas d'une autre façon lol

En tout cas, merci :)
0
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
15 sept. 2006 à 08:56
Bon, je reviens sur le sujet désolée.

En fait j'essaye de faire la suppression d'une ligne. Pour ça j'ai un bouton dans la première case de chaque ligne du tableau pour la suppresion.
A chaque ligne j'ai mis un id : newRow.setAttribute("id","ligne"+nbLignes);

Cet id est correct, je l'ai vérifié :) Par contre je n'arrive pas à faire en sorte de mettre un onClick sur le bouton suppression de chaque ligne pour dire qu'il faut supprimer la ligne :

En fait il me renvoit toujours l'identifiant de la dernière ligne. Pourtant je définit ça au moment ou je met le bouton dans la première ligne au moment de sa création.

J'ai essayé plusieurs façon, mais c'est toujours le dernier id que je récupère :(

Quelqu'un voit comment je pourrais procéder ?
0
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
15 sept. 2006 à 10:53
Bon j'ai essayé de mettre sur le bouton un id similaire à celui de la ligne ("image"+nbLignes) comme ça il suffit de récupérer le nbLignes pour savoir qu'elle ligne supprimer. Mais c'est pas aussi simple lol

Si j'utilise deleteRow, en paramètre il faut que je lui donne le numéro de la ligne à supprimer, et là ça va plus avec ma méthode d'idi.

Supposons j'ai 4 lignes, si je supprime la 2 avec deleteRow(2), tout va bien parce que c'est la première suppression, mais si ensuite je demande à supprimer la 3, il va supprimer la 4 (effectivement la ligne 3 remonte d'un cran, elle se trouve donc en 2, et la 4 en 3) ...

Je sais pas si vous avez compris ...

Et autre chose bizarre (mais que je n'ai pas encore regardé), quand on supprime des lignes et qu'on en ajoute après, les nouvelles lignes ajoutées sont bizarres --> elles n'ont que 2 colonnes au lieu de 7, et sont miniscules en hauteur!
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
15 sept. 2006 à 15:23
Attention.. Ton paramétre de deleterow est ton numéro de rangée et pas ton id.

Même si au premier affichage ces deux valeurs sont identiques ce n'est plus le cas après.

Avant de faire ton deleteRow il faudra faire à peu près ça:

Boucle sur la nombre de lignes

    Si Id de ligne courant = Id du bouton cliqué

        tu mémorises le numéro de ligne (via une valeur qui s'incrément par exemple)

        tu break ta boucle

    FinSi

FinBoucle

deleteRow(numéro de ligne)


Ca te convient comme raisonnement ?

Pour la hauteur des lignes il faut que tu les determine car les cases de cette ligne sont vides.

S.
0
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
15 sept. 2006 à 16:09
Euh, j'ai pas tout  compris désolée (la fin de journée est difficile lol)

Si Id de ligne courant = Id du bouton cliqué
        tu mémorises le numéro de ligne (via une valeur qui s'incrément par exemple)

Quand l'id de la ligne courante ne vas plus être égale à celui du bouton cliqué, il va se passer quoi?

Et pour la hauteur des lignes, c'est un bug (pourquoi je sais pas, j'ai pas eu le temps de chercher encore), parce que les cases sont remplies (c'est pour mes tests m'enfin)!!

Merci pour ton aide :)
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
15 sept. 2006 à 16:40
Quand l'id de la ligne courante ne vas plus être égale à celui du
bouton cliqué, il va se passer quoi? --> Rien.. Ce n'est po ce ke tu
veux ??

Tu as la maîtrise du foncitonnement, donc si tu veux ke ça fasse kelke
chose pourkoa po.. mais pour moi il devrait rien de produire..

N'oublie pas ke tu fais une boucle donc tu devras toujours atteindre cette condition..

S.
0
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
15 sept. 2006 à 18:55
En fait, je crois que j'ai saisi mais pas tout. Le truc c'est que ça va marcher pour la première, mais après mes identifiants de boutons et ceux de la ligne ne seront plus jamais égaux, et donc je ne pourrais plus supprimer d'autres lignes non??

C'est pas vraiment ce que je souhaite. Mais je parie que j'ai encore tout compris de travers lol
0
cs_chamallow Messages postés 363 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 29 janvier 2007 1
18 sept. 2006 à 08:28
Merci pour le rowIndex. Je pensais pas que ça existait !!

Par contre, sous Firefox, parentElement ne marche pas, il faut utiliser parentNode, et ça marche sous Firefox et sous IE.

Et pour les lignes que je créais après en avoir supprimer et qu'elles était bizarre, et bien c'est parce que quand j'en supprimais, j'oubliais de décrémenter le nombre de lignes totales.

Et pour ton façon de faire, elle est sympa :) Maintenant c'est au chef de décider :p

En tout cas, merci à vous deux de vous être repencher sur mon problème :)
0
Rejoignez-nous