IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Ajouter une ligne dans un tableau HTML


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Ajouter une ligne dans un tableau HTML
    Bonjour

    je suis du genre a chercher et trouver la réponse de mes propres moyen, mais la j'ai pas beaucoup de temps c'est pour ça que c'est la 2em fois que je pose des questions sur le forum, sans vraiment avoir chercher comme je le fais habituellement. Donc je m'en excuse et j’espère que vous allez quand même m'aider.
    Comme je commence a découvrir le JS je perd beaucoup de temps pour des truks facile.

    Ici je voudrais ajouter une ligne dans un tableau HTML en cliquant sur un bouton, a vrai dire j'y arrive a ajouter cette ligne avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /* Ajout d'une ligne dans un Tableau */
    function Ajout_Ligne(tableID)
    {
    	//alert("Ajout Ligne");
    	var newRow = document.getElementById(tableID).insertRow(-1);
     
    	if(tableID == 'objectifs1')
    	{
    		//alert("objectifs_autres");
    		var newCell = newRow.insertCell(0);
    		newCell.innerHTML = '<td align="center"><input type="checkbox" name="cellule[]" value=""></td>';
    		newCell = newRow.insertCell(1);
    		newCell.innerHTML = '<td align="center"><textarea cols="47%" name="libObjectif[]"></textarea></td>';
    		newCell = newRow.insertCell(2);
    		newCell.innerHTML = '<td align="center"><input type="radio" value="R" name="resultatObjectif[]"></td>';
    		newCell = newRow.insertCell(3);
    		newCell.innerHTML = '<td align="center"><input type="radio" value="P" name="resultatObjectif[]"></td>';
    		newCell = newRow.insertCell(4);
    		newCell.innerHTML = '<td align="center"><input type="radio" value="N" name="resultatObjectif[]"></td>';
    		newCell = newRow.insertCell(5);
    		newCell.innerHTML = '<td align="center"><textarea cols="40%" name="analyseecartObjectif[]"></textarea></td>';
    	}
    comme vous le voyez sur cette ligne il y a des boutons radios. eh bien si j'ajoute qu'une seul ligne il n'y a pas de problèmes mais des que j'en ajoute la deuxième il y a un résultat inattendu.
    En effet les boutons radios des 2 lignes font comme si c’était de la même ligne et je peux choisir qu'une case (normalement le reste de la ligne c'est a dire les champs de texte doivent faire aussi la même chose mais c'est plus facile de remarquer sur des boutons radios).

    Ca me parait plutôt logique car les nom sont les mêmes et il n' a pas d’incrémentation. (je peux aussi me tromper et la raison est peut être pas la).

    quoi qu'il en soit le code est plus au moins trouver sur internet et j'ai juste modifier ce qu'il me fallait, donc bref comme je vient de dire plus haut suis pas un as en JS.


    si quelqu’un a une solution a partager pour mon problème je lui serait vraiment reconnaissant.

    merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    => passe par le DOM
    regarde du coté de insertRow()
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par grialat Voir le message
    Ca me parait plutôt logique car les nom sont les mêmes et il n' a pas d’incrémentation. (je peux aussi me tromper et la raison est peut être pas la).
    Bon ben tu as trouvé tout seul le problème
    Donc pour le résoudre, il faut donner des noms différents à tes input. Par exemple en incrémentant une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    /* Ajout d'une ligne dans un Tableau */
    function Ajout_Ligne(tableID)
    {
    	//alert("Ajout Ligne");
     
            var table = document.getElementById(tableID);
    	var newRow = table.insertRow(-1);
            var rowNumber = table.childNodes.length;
     
     
    	if(tableID == 'objectifs1')
    	{
    		//alert("objectifs_autres");
    		var newCell = newRow.insertCell(0);
    		newCell.innerHTML = '<td align="center"><input type="checkbox" name="cellule'+rowNumber+'" value=""></td>';
    Quelques conseils au passage :
    -plutôt que alert() pour débugger, utilise l'API console et les outils de développement de ton navigateur. Ci-joint la doc pour Chrome : https://developers.google.com/chrome.../console?hl=fr

    - plutôt que innerHTML, utilise toutes les fonctions de manipulation du DOM : http://javascript.developpez.com/tut...page=page_5#LV

    - n'hésite pas à adapter tes fonctions pour simplifier le problème. Par exemple, il n'y a pas d'intérêt à mettre un code spécifique pour "objectifs1" dans ta fonction Ajout_Ligne. Il vaut mieux faire une fonction à part. Aussi au lieu d'utiliser 6 fois la fonction insertCell et de mettre plein de HTML dans ton code Javascript, essaie de trouver une meilleure solution comme clôner la ligne précédente, ou te servir d'une librairie de templating en Javascript
    One Web to rule them all

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 649
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 649
    Points : 11 138
    Points
    11 138
    Par défaut
    Bonjour,

    Tous les exemples d'insertion / suppression d'une ligne d'une table dans la FAQ :
    http://javascript.developpez.com/faq...pt/?page=Table

    et pour reprendre ce qu'on déjà écrit SpaceFrog et SylvainPV, innerHTML est à proscrire dans ce genre de cas.

Discussions similaires

  1. Ajouter une ligne dans un tableau
    Par kenru dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/10/2009, 16h10
  2. Ajout de ligne dans un tableau html
    Par jmtrivia dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 16/04/2009, 14h26
  3. Réponses: 1
    Dernier message: 12/12/2008, 17h06
  4. Réponses: 9
    Dernier message: 15/06/2008, 11h13
  5. [vb6] Ajouter une ligne dans un tableau excel
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 13/06/2006, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo