|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2007 Messages : 33 ![]() |
Bonjour,
J'ai un formulaire html assez complexe avec des tableaux imbriqués dont la taille peut varier avec des boutons javascript pour cloner / supprimer / ajouter / deplacer des lignes. voilà un code simplifié de la page html : Code :
Par exemple, si je clone une ligne, je me retrouve avec des noms en double, ce qui ne va pas au moment de l'envoie du formulaire. Donc j'ai commencé à coder pour renommer, je peux renommer en utilisant des regexp par exemple : Code :
J'ai également des inputs en readonly sans attribut name. Comment selectionner pour une ligne de tableau donnée tout les elements du formulaire qui ont un attribut "name" ? ou peut-être tout les noms commencant par "tab1[i]" ? Enfin, si vous avez une meilleures idée, moins laborieuse, je suis à l'écoute. merci |
||||
|
|
00
|
|
|
#2 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2007 Messages : 33 ![]() |
bon, c'est pas la gloire avec ce post...
![]() J'ai continué, mais je bloque toujours sur deux points : 1 - Comment combiner dans une seule collection deux collections d’éléments. par exemple les 2 collections suivante : elts1 = lignes[i].getElementsByTagName("input") elts2 = lignes[i].getElementsByTagName("select"). j'ai pas trouvé d'autre méthode pour sélectionner à la fois les inputs et les selects d'une ligne de tableau, Une alternative serait de sélectionner les éléments qui ont l'attribut "name", mais je n'ai pas trouver non plus. 2 - Comment remplacer la deuxième ou troisième occurrence d'un regexp par exemple : tab1[0][tab2][0][nom] |
|
|
00
|
|
|
#3 | ||
|
Membre expérimenté
![]() Développeur Inscription : février 2010 Messages : 360 ![]() |
Bonjour,
Pour la première question, il existe la méthode concat de l'objet Array : Code :
Sinon, tu pourrais peut-être utiliser un framework, surtout qu'il existe souvent pas mal de widget/plugins pourrait peut-être faire l'affaire ? |
||
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() danseur Inscription : août 2003 Messages : 2 667 ![]() |
ta structure (html en fait) est tout de même drôlement compliquée non?
comme on ne sait pas trop ce que tu fais avec ce "formulaire-tableau", ce serait pas mal d'avoir un aperçu de page; tu peux? Citation:
|
|
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2007 Messages : 33 ![]() |
Oui la structure semble compliquée, c'est pour ça que j'en ai donné qu'une vue simplifiée. C'est 3 niveaux de tableaux imbriqués en fait. Mais la page est assez simple visuellement, et pour l'utilisateur c'est facilement compréhensible.
C'est une page qui est destiné à modifier un fichier de configuration de différentes vues (groupes) de graphiques contenant des séries de mesures. Il y a différentes vues possibles qui affichent chacune un ou plusieurs graphiques contenant chacun une ou plusieurs séries de mesures à afficher. C'est pour ça qu'il y'a trois niveaux de tableau. Concrètement, avec l'exemple d'une maison, on décide de créer une vue (qui sera une page html) ou on décide de visualiser l'évolution des températures de la maison, cette vue contient un graphique pour chaque pièces de la maison, et pour chaque graphique on pourrait avoir plusieurs températures (sol, plafond, moyenne, etc). Puis après on créer une autre vue avec seulement les pièces du premier, une autre avec les pièces du second, etc... Pour chaque niveau de tableau, les possibilités sont les mêmes. il y en a 4, c 'est des boutons qui exécutent un code javascript (ajouter, supprimer, déplacer, dupliquer). Par exemple on peut ajouter une vues à la liste des vues existantes, un graphique à la liste des graphiques d'une vue, une série à la liste des séries d'un graphique. Dans ce cas le js ajoute une ligne au tableau courant avec un "appendChild(newTr)". Le formulaire renvoie un tableau (en php) de ces différentes vues, il est structuré pour être archivé dans mysql. C'est pour ça que le formulaire est sous forme de tableau. Pour l'instant ça fonctionne bien, me reste plus qu'à solutionner cette histoire d'indexation du formulaire. C'est mon premier code en js, je ne suis pas encore passer aux librairies.... à nadox, merci, je vais essayé, j'ai déjà tenté le concat, mais j'ai du me planter dans l’écriture... |
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2007 Messages : 33 ![]() |
@nadox, j'ai une erreur avec ta solution.
Code :
var elts = lignes[i].getElementsByTagName("input").concat(lignes[i].getElementsByTagName("select")); edit : trouvé pourquoi ça ne marche pas : concat ne fonctionne qu'avec les types string et array, elts est un object |
|
|
00
|
|
|
#7 |
|
Membre confirmé
![]() Développeur informatique Inscription : avril 2011 Messages : 196 ![]() |
Moi je pensais a une structure arborescente du genre TreeGrid ou bien le plugin jQuery treeTable
En ce qui concerne le formulaire, une capture écran nous aiderais a mieux comprendre le probleme (avec bouton supprimer, dupliquer, ajouter..etc) Pour renomer, moi je vois plus une fonction récursive qui une fois le nom d'une branche changé, toute les branches-fils relié sont renomées, et les branches-freres suivantes et leurs branches-fils...etc |
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2007 Messages : 33 ![]() |
ah non ce n'est pas du tout ça, ça se présente comme ça :
(les textes en bleu sont des inputs)
|
|
|
00
|
|
|
#9 |
|
Membre confirmé
![]() Développeur informatique Inscription : avril 2011 Messages : 196 ![]() |
Et si par exemple tu travaillais seulement avec le DOM sans te casser la tete avec les noms et quand tu valider le tout, envoi ton tableau multi-dimension sous un format standars genre JSON.
Quand tu crée un element dynamiquement, quels sont les parametres que tu passe aux boutons supprimer de cet element? |
|
|
00
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2007 Messages : 33 ![]() |
Je ne connais pas du tout la technique JSON/DOM. Là, je ne suis pas loin du but, ça m’ennuierai de tout recommencer. Mais, je me rend bien compte que l'étape suivante ça sera d'utiliser Jquery ou autre et d'autres choses plus modernes...
C'est l'emplacement du bouton qui compte j'utilise simplement onclick="supprimeLigne(this). l'action concerne le Tr ou se trouve le bouton, tout bêtement. je ferais peut-être mieux de faire un autre sujet pour le pb de regexp.. |
|
|
00
|
|
|
#11 |
|
Membre confirmé
![]() Développeur informatique Inscription : avril 2011 Messages : 196 ![]() |
Peut-tu nous donner le code que tu utilise pour cloner une ligne par exemple?
|
|
|
00
|
|
|
#12 |
|
Membre confirmé
![]() Développeur informatique Inscription : avril 2011 Messages : 196 ![]() |
Sinon une autre idée c'est de ne pas donner de valeur name pour les differents input, select. Tu fait tes ajouts/suppression/clonage. Et avant de poster ton tableau, tu le parcours en renomant les branches selon la profondeur. C'est possible?
|
|
|
00
|
|
|
#13 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2007 Messages : 33 ![]() |
On se disperse là non ?
mon pb à la base c'est de sélectionner à la fois les select et input contenu dans un tr dans une seule collection d'objets, soit par getElementsByTagName(), (mais ce n'est pas possible avec "concat"), soit avec selectByName. Après y'a juste un pb de regexp pour changer les indices, mais faudrait mieux que je fasse un autre sujet plutôt. Sinon, il y avait certainement mieux à faire, mais comme je l'ai dis plus haut c'est mes premiers code js, c'est pour ça que c'est un peu artisanal... mais ça fonctionne bien tout de même bien dans les différents navigateurs. Par contre si vous avez un exemple de formulaire avec php/js/json ou par xlst je suis curieux de voir comment ça fonctionne. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com