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 :

Ajout / Suppresion de champs


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Par défaut Ajout / Suppresion de champs
    Salut tout le monde

    voilà j'ai besoin, dans un formulaire, de permettre l'ajout ou la suppression dynamiquement de champs.

    Le résultat que je chercher à atteindre est celui que l'on peut voir sur cette image

    http://win.eurohub.free.fr/tuto/lowid/freebox5.jpg

    j'ai essayer de commencer le script mais je me heurte à quelques problèmes


    voici le fichier js
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    var d,nb_lignes, nom_ligne,numero_ligne,boutton_supprimer,tr,td;
     
    function AddChamp(){
    d=document.getElementById('ligne_serveur');
    //Compte le nombre d'éléments
    nb_lignes=d.getElementsByTagName('input');
     
    tr=document.createElement('tr');
    tr.setAttribute('id','tr_'+nb_lignes.length);
    d.appendChild(tr);
     
    d=document.getElementById('tr_'+nb_lignes.length);
     
     
    numero_ligne=document.createElement('input');
    numero_ligne.setAttribute('type','text');
    numero_ligne.setAttribute('name','numero_ligne'+nb_lignes.length);
    numero_ligne.setAttribute('class','class="classinput_lsize"');
    d.appendChild(numero_ligne);
     
    boutton_supprimer=document.createElement('button');
    boutton_supprimer.setAttribute('value','supprimer');
    boutton_supprimer.setAttribute('onclick','removeElement("tr_'+nb_lignes.length+'")');
    d.appendChild(boutton_supprimer);
    }
    function removeElement(id) {
    	d = document.getElementById('ligne_serveur');
      var sup = document.getElementById(id);
      d.removeChild(sup);
    }
    Dans le corps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <div id="ligne_serveur" style="margin-left:100px;width:200px">
    						</div>
    D'une part , si je fait un getElementsByTagName('tr') ça ne fonctionne pas, ce qui va m'embêter quand j'aurais plusieurs champs input. Ensuite ma fonction supprimer me renvoie une erreur également

    Erreur*: uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER)" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: http://162.38.113.245/lmb/profil_adm...erveur_voip.js :: removeElement :: line 39" data: no]
    Si vous avez des idées ou des conseils pour me permettre d'arriver au résultat que je désire, je les prendrais avec volontiers.

    Merci d'avance


    Yann

  2. #2
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut Rows Rolls
    Bonjour,

    d est un div et non une table. Les <tr> s'accroche à des <table>.
    Si:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    d.getElementsByTagName('tr')
    ne fonctionne pas, vous pouvez essayer (une fois que vous aurez une table):


  3. #3
    Membre émérite Avatar de sebhm
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 090
    Par défaut
    ce post devrait t'interesser

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Par défaut
    le div est dans une table. Je l'ai mis en place au départ car mon but était de compter le nombre de tr dans ce div.(car il y a d'autre champ dans le formulaire).

    Je regarde le lien dessuite

  5. #5
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut A Taaaaable! Mimi, il est 8h... Mais t'avais dit qu'on mangerait des Knaaackiii
    Le div à beau être dans une table, il n'empêche qu'on attache pas des <tr> à un div mais à une <table>.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Par défaut
    dans ce cas la, comment faire pour dire que je veux que le tr soit attacher à cette endroit? (appendChild attache à la fin il me semble)

  7. #7
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut And you wash, wash, wash. Threeee tiiime
    Hé bien... Pour différencier vos <tr>, vous pouvez leur ajouter un attribut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <tr att1>...</tr>
    <tr att1>...</tr>
    <tr att2>...</tr>
    <tr att2>...</tr>
    <tr att2>...</tr>
    <tr att2>...</tr>
    Ici vous avez deux ligne att1 et quatre lignes att2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var liste_tr = maTable.rows;
     
    if(liste_tr[0].getAttribute("att1") != null)
       alert("Youpiiiie");
    Enfin, j'espère.

    Mais l'appendChild du <tr> se fera bien sur une <table>.

    Sinon, faites plusieurs tables ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Par défaut
    Oui oui c'est ce que j'ai fait, je sais pas pourquoi j'y ai pas pensé plus tot

    var d,nb_lignes, nom_ligne,numero_ligne,boutton_supprimer,tr,td;

    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
    23
    24
    25
    26
    27
    28
    function AddChamp(){
    d=document.getElementById('ligne_serveur');
    //Compte le nombre d'éléments
    nb_lignes=d.rows.length;
     
    tr=document.createElement('tr');
    tr.setAttribute('id','tr_'+nb_lignes);
    d.appendChild(tr);
     
    d=document.getElementById('tr_'+nb_lignes);
     
    numero_ligne=document.createElement('input');
    numero_ligne.setAttribute('type','text');
    numero_ligne.setAttribute('name','numero_ligne'+nb_lignes);
    numero_ligne.setAttribute('class','class="classinput_lsize"');
    d.appendChild(numero_ligne);
     
    boutton_supprimer=document.createElement('input');
    boutton_supprimer.setAttribute('type','button');
    boutton_supprimer.setAttribute('value',"X");
    boutton_supprimer.setAttribute('onclick','removeElement("tr_'+nb_lignes+'")');
    d.appendChild(boutton_supprimer);
    }
    function removeElement(child_id) {
    	var parent = document.getElementById('ligne_serveur');
    	var child = document.getElementById(child_id);
      d.removeChild(child);
    }
    me reste plus qu'a faire fonctionner la fonction remove et ça sera parfait^^

  9. #9
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut :-/
    D'abord, il y a ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    d.removeChild(child);
    // au lieu de
    parent.removeChild(child);
    Ensuite, je ne suis pas certain que ceci soit correcte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tr.setAttribute('id','tr_'+nb_lignes);
    J'aurai plutôt tendance à faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tr.id = 'tr_'+nb_lignes;
    C'est la même chose, vous allez me dire. Pas sûr. Ici on joue avec un id. Je ne sais pas trop comment il gère les id. Faites un alert dans la fonction remove pour voir l'id qu'il a.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Par défaut
    ha oui c'était ça l'erreur^^. En ce qui concerne le setAttribut ça a l'air de marcher, quand je regarde les id avec webdevelloper ça me mets les bons^^


    merci beaucoup en tout et bonne journée

    Ps: je remet le script dans sa dernière version, si ça peut aider des gens

    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
    23
    24
    25
    26
    27
    28
    29
    30
    var d,nb_lignes = 0, nom_ligne,numero_ligne,boutton_supprimer,tr,td;
     
    function AddChamp(){
    d=document.getElementById('ligne_serveur');
    //Compte le nombre d'éléments
    nb_lignes++;
     
    tr=document.createElement('tr');
    tr.setAttribute('id','tr_'+nb_lignes);
    d.appendChild(tr);
     
    d=document.getElementById('tr_'+nb_lignes);
     
    numero_ligne=document.createElement('input');
    numero_ligne.setAttribute('type','text');
    numero_ligne.setAttribute('name','numero_ligne'+nb_lignes);
    numero_ligne.setAttribute('class',"classinput_lsize"');
    d.appendChild(numero_ligne);
     
    boutton_supprimer=document.createElement('input');
    boutton_supprimer.setAttribute('type','button');
    boutton_supprimer.setAttribute('value',"X");
    boutton_supprimer.setAttribute('onclick','removeElement("tr_'+nb_lignes+'")');
    d.appendChild(boutton_supprimer);
    }
    function removeElement(child_id) {
    	var parent = document.getElementById('ligne_serveur');
    	var child = document.getElementById(child_id);
    	parent.removeChild(child);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <table id="ligne_serveur" style="width:100%">
    							</table>
     
    							<p>
    							<input type="button" value="+" onclick="AddChamp()" />

  11. #11
    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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    J'aurais tout basé sur les id nommés rationnellement et avec une syntaxe crossbrowser :
    par expérience les "ça à l'air de marcher" ... ben ça marche jusqu'a ce que ça tombe sur un navigateur ou une version ou ça marche pas ...
    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 !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme panneau de confi ajout/suppresion de programme
    Par lemotard dans le forum Windows XP
    Réponses: 4
    Dernier message: 03/06/2006, 21h39
  2. Réponses: 4
    Dernier message: 11/05/2006, 16h23
  3. ajout d'un champs input text dans un formulaire
    Par korrigann dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/04/2006, 15h45
  4. Ajout dynamique de champs de type file dans un formulaire !
    Par stitch dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/11/2005, 11h18
  5. Table Access : ajout d'un champ depuis VB6
    Par pcvesoul dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/09/2005, 09h14

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