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

jQuery Discussion :

fonction clone() et formulaires dans un tableau


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Par défaut fonction clone() et formulaires dans un tableau
    [Testé avec Google Chrome 5.0.375.99]

    Bonjour,

    J'ai une liste d'employé placée dans un tableau. Pour chaque ligne, un employé, pour chaque colonne une information sur l'employé. Afin de rendre chaque ligne modifiable et pour pouvoir utiliser les fonctionnalités "reset" et "submit" des formulaires, j'ai transformé chaque ligne en formulaire. Ma dernière colonne contient des boutons d'action.

    Dans mon source HTML, une ligne ressemble à ceci :

    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
     
    <tr id_employe="56">
      <form action="#" method="post" onsubmit="E_save_employe(this.parentNode); return false;">
        <td>[...]</td>
        <td><input name="nom" type="text" value="FOO"></td>
        <td><input name="prenom" type="text" value="bar"></td>
        <td>[...]</td>
        <td><input name="matricule" type="text" value="123"></td>
        <td>
          <button type="submit" style="cursor: pointer; ">
            <img src="img/savedisabled.gif" border="0">
          </button>
          <button type="reset" style="cursor: pointer; ">
            <img src="img/annuler.png" border="0">
          </button>
          <img src="img/supprimer.png" border="0" onclick="E_delete_employe(this.parentNode.parentNode)" style="margin-left: 3px; margin-top: 1px; cursor: pointer; ">
        </td>
      </form>
    </tr>
    Au début de mon formulaire, j'ai une ligne vierge servant à l'ajout qui est sensiblement la même que les autres. Une fois que mon formulaire d'ajout est soumis, je clone donc cette ligne pour l'ajouter à la fin de ma liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var o = $("TABLE.liste TR:nth-child(2)");
    var n = $(o).clone();
    $("TABLE.liste").append(n);
    Le problème, c'est que le résultat ne ressemble pas vraiment à un clone. En fait, l'inspecteur d'élément de Google Chrome interprète le code HTML que j'ai écrit plus haut ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <tr id_employe="56">
      <form action="#" method="post" onsubmit="E_save_employe(this.parentNode); return false;"></form>
        <td>[...]</td>
        <td>[...]</td>
        <td>[...]</td>
        <td>[...]</td>
        <td>[...]</td>
        <td>[...]</td>
    </tr>
    Cela ne pose aucun problème pour le code interprété au chargement mais, suite au clonage de mon élément, le résultat ressemble à une ligne où on aurait ajouté une colonne de trop au début, comme si la balise form était devenu un TD. L'inspecteur d'élément de Google Chrome ne présente cependant aucune différence entre cette nouvelle ligne et la ligne originale.

    J'ai alors tenté de prendre toutes les cellules de ma ligne et de les réinsérer dans mon formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    var o = $("TABLE.liste TR:nth-child(2)");
    var n = $(o).clone();
    $("TABLE.liste").append(n);
    var td = $("TD", n).detach();
    var frm = document.createElement("form");
    $(frm).attr("action", "#");
    $(frm).attr("method", "post");
    $(frm).submit( function() { E_save_employe(this.parentNode); return false; });
    $(n).append(frm);
    $(frm).append(td);
    ...
    Cependant, malgré que l'inspecteur d'élément m'affiche un code en touts points pareil au code HTML initial, toutes mes cellules s'affichent comme le contenu de la première cellule de la ligne incarnée par le form. Laissant donc une première colonne démesurément large et cinq colonnes vides dans ma ligne...

    Je suppose que je fais quelque chose qu'il ne faut pas dans la manipulation ou dans la déclaration de ma ligne et/ou de mon formulaire. Quelqu'un a une petite idée?

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("table.liste > tbody > tr:first").clone().appendTo("table.liste");
    Le problème vient de l'emplacement de la balise form, elle ne peut pas se trouver dans un tr !

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. Aligner un formulaire dans un tableau
    Par __sPiKe__ dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 08/06/2009, 18h09
  2. Réponses: 3
    Dernier message: 22/03/2008, 11h48
  3. formulaire dans un tableau
    Par AnneB dans le forum Struts 1
    Réponses: 11
    Dernier message: 22/05/2007, 15h57
  4. Envoyer des controles d'un formulaire dans un tableau
    Par CB56 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 18/11/2005, 10h43

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