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 :

[DOM] Données de champs de formulaires générés en JS inaccessibles


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut [DOM] Données de champs de formulaires générés en JS inaccessibles
    Bonjour,

    Dans une page HTML je génére en JS (en utilisant l'API mootools) des champs de formulaire texte. Ceux-ci portent tous les même nom ce qui me permet de récupérer dans une servlet un tableau de données.

    Le seul problème est que je n'arrive pas à récupérer les données de ces champs générés dynamiquement. Les seules données que je récupère sont celles des champs inscris en dur dans la page html.

    Est-ce un comportement normal ? Et si oui y a t'il une solution (simple ?) ?

    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 639
    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 639
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    de quel type de champs s'agit il ?
    de memoire ce sujet à déja été traité, et sous IE le name ne peut etre attribué dynamiquement ...

    sauf a utiliser une syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.createElement("select name='machin'");
    arf j'ai retrouvé un truc
    http://www.developpez.net/forums/sho...ight=dynamique
    http://www.developpez.net/forums/sho...34&postcount=6
    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
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    Vérifie que tes champs sont dans le bon formulaire!

  4. #4
    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 639
    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 639
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    montre nous le html généré ...
    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 !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    A priori, c'est ce que j'utilise pour ajouter mes champs inputs text (enfin ce que mootools fait à priori).

    Mais je viens de constater que cela fonctionne avec IE. C'est uniquement FF qui semble ignorer ces données dans la requète POST.

    Voici le code 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
     
    var completers = new Array(); //mes champs texte
    initCompleters();
    function initCompleters(){
    /*
     La fonction créé des champs avec auto-completion donc rien à voir avec mon problème
    */
    }
    //Lorsque je clique sur un bouton "+" cette fonction est lancée
    function addCompleter(){
    	i = nCompleter = $ES('input[name=params]').length; //nombre de champs texte
    	lastCompleter = $('param'+(i-1)+'_field');
    //créé l'élément DOM
    	theCompleter = new Element('input', {
    						'type' : 'text',
    						'id' : 'param' + i + '_field',
    						'class' : 'input_text',
    						'name' : 'params',
    						'onselect' : 'addCompleter(i)'
    					});
    //et l'ajoute après le dernier input text
    	theCompleter.injectAfter(lastCompleter);
    	initCompleters();
    }
    Et voici la source DOM générée (les deux premiers champs sont en dur et les deux seconds générés en 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
     
    <div id="add_signature">
     
    		Signature :
    		<table>
    		<tbody><tr><td>Return :</td>
    		<td><input autocomplete="off" name="ret_type" value="" class="input_text" id="return_field" type="text"></td></tr>
    		<tr><td>Parameters :</td>
    		<td>
    		<input autocomplete="off" name="params" class="input_text" id="param0_field" type="text">
    		<input autocomplete="off" name="params" class="input_text" id="param1_field" type="text">
     
    		<input autocomplete="off" name="params" class="input_text" id="param2_field" type="text">
    <input autocomplete="off" name="params" class="input_text" id="param3_field" type="text">
    <input class="plus" onclick="addCompleter()" type="button">
    		</td></tr>
    		</tbody></table>
    		<input id="add_sig" name="action" value="add_sig" class="ajouter" type="submit">
    </div>

  6. #6
    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 639
    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 639
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    heu je ne vois pas les balises form ?? c'est normal ?
    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 !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Effectivement, en écrivant le message je constate que les balises de formulaire se déplacent dans la source DOM ...

    Ca c'est la source du document HTML :

    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
     
    <FORM id="form_ope" action="ActionsSecondStep" method="post">
    		<select size="5" name="ope_id" id="operations_list" style="clear:both">
     
     
    			<option selected="selected" value="0">xcbcxb</option>
     
    		</select>
    		<input type="submit" id="add_interf" value="rem_ope" name="action" class="moins" />
    		</div>		
     
     
    		<div id="add_signature">
    		Signature :
    		<table>
     
    		<tr><td>Return :</td>
    		<td><INPUT TYPE="text" NAME="ret_type" value="" class="input_text" id="return_field" /></td></tr>
    		<tr><td>Parameters :</td>
    		<td>
    		<INPUT TYPE="text" NAME="params" class="input_text" id="param0_field" />
    		<INPUT TYPE="text" NAME="params" class="input_text" id="param1_field" />
    		<input type="button" class="plus" onClick="addCompleter()"  />
    		</td></tr>
     
    		</table>
    		<input type="submit" id="add_sig" name="action" value="add_sig" class="ajouter" />
    		</div>
    		</FORM>
    Et ça la source DOM :

    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
     
    <form id="form_ope" action="ActionsSecondStep" method="post">
    		<select size="5" name="ope_id" id="operations_list" style="clear: both;">
     
     
    			<option selected="selected" value="0">xcbcxb</option>
     
    		</select>
    		<input id="add_interf" value="rem_ope" name="action" class="moins" type="submit">
    		</form></div>		
     
     
    		<div id="add_signature">
     
    		Signature :
    		<table>
    		<tbody><tr><td>Return :</td>
    		<td><input autocomplete="off" name="ret_type" value="" class="input_text" id="return_field" type="text"></td></tr>
    		<tr><td>Parameters :</td>
    		<td>
    		<input autocomplete="off" name="params" class="input_text" id="param0_field" type="text">
    		<input autocomplete="off" name="params" class="input_text" id="param1_field" type="text">
     
    		<input autocomplete="off" name="params" class="input_text" id="param2_field" type="text"><input autocomplete="off" name="params" class="input_text" id="param3_field" type="text"><input class="plus" onclick="addCompleter()" type="button">
    		</td></tr>
    		</tbody></table>
    		<input id="add_sig" name="action" value="add_sig" class="ajouter" type="submit">
    		</div>
    Ce qui est bizarre, c'est que même comme ça je reçois toutes mes données de frmulaire mais pas les deux champs générés dynamiquement ...

  8. #8
    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 639
    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 639
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    comme préssenti les éléments ajoutés ne le sont pas dans le form ...

    ... peut être Motools n'aime-t-il pas les tables dans les form .. tout comme le w3c d'ailleurs
    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 !

  9. #9
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    champs hors du formulaire et donc non transmis

    grillé

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Oui mais il reste deux problèmes dans ce cas :

    1. Pourquoi la balise </form> se déplace t'elle ??
    2. Pourquoi malgré le fait que les champs "params" soient hors des balises form, je reçois tout de même les deux premiers qui sont ceux qui sont en dur dans le HTML ?

  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 639
    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 639
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    les deux premier étant englobés dans la balise form il est normal qu'ils soient transmis ... quoiqui le bouton sublit étant en dehors du form... les navigateurs doivent extrapoler le fait qu'il n'y ait qu'un form sur le page ?

    par contre pour le déplacement de la balise ...????

    si tu n'ajoutes rien tu es sur que le bouton submit est bien dans le form ?
    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 !

  12. #12
    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 639
    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 639
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    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
    <script type='text/javascript'>
    var index=0
     
    function addElt(){
    var newElt=document.createElement('input');
    newElt.name="nom_"+index;
    newElt.value="Valeur_"+index
    newElt.style.clear="right";
    index++;
    document.forms[0].insertBefore(document.createElement('br'),document.getElementById('sub'));
    document.forms[0].insertBefore(newElt,document.getElementById('sub'));
    }
    </script>
     
    </head>
     
    <body onload="alert(self.location.href)" >
     
    <form name='one' action="#" method="get" />
    <input type="text" name='two' />
    <input type="submit" name='three' id='sub'  />
    </form>
    <input type='button'  value='go' onclick="addElt()" />
    </body>
    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 !

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    les deux premier étant englobés dans la balise form il est normal qu'ils soient transmis ...
    Je parle de ces deux premiers là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		<input autocomplete="off" name="params" class="input_text" id="param0_field" type="text">
    		<input autocomplete="off" name="params" class="input_text" id="param1_field" type="text">
    ... qui ne sont pas plus dans le FORM que les deux suivants

  14. #14
    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 639
    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 639
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Parceque le navigateur doit garder en mémoire en partie la configuration de départ ???
    Les mystères de javascript ...


    En tout cas le code ci dessus fonctionne, je supçonne fort motools de bugguer
    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 !

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Le problème venait bien de ces balises FORM mal placés ... Pour obtenir la valeur du champ "ope_id" du coup j'ai été obligé de rajouter un champ hidden par du JS lorsque l'utilisateur sélectionne un élément dans la liste.

    Voici le nouveau code :
    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
    32
    33
     
    		<select size="5" name="ope_id" id="operations_list" style="clear: both;" onchange="updateOpeId()">
     
     
    			<option value="0">Connect</option><option selected="selected" value="1">Send</option>
     
    		</select>
     
    		<input id="add_interf" value="rem_ope" name="action" class="moins" type="submit">
    		</div>		
     
     
    		<form id="form_interf" action="ActionsSecondStep" method="post">
     
    		<input name="ope_id" id="ope_hidden" value="1" type="hidden">
     
    		<div id="add_signature">
    		Signature :
    		<table>
    		<tbody><tr><td>Return :</td>
    		<td><input autocomplete="off" name="ret_type" value="" class="input_text" id="return_field" type="text"></td></tr>
     
    		<tr><td>Parameters :</td>
    		<td>
    		<input autocomplete="off" name="params" class="input_text" id="param0_field" type="text">
    		<input autocomplete="off" name="params" class="input_text" id="param1_field" type="text">
    		<input autocomplete="off" name="params" class="input_text" id="param2_field" type="text"><input class="plus" onclick="addCompleter()" type="button">
    		</td></tr>
    		</tbody></table>
    		<input id="add_sig" name="action" value="add_sig" class="ajouter" type="submit">
     
    		</div>
    		</form>
    Et voici ce que ça donne :

    On peut ajouter des champs "parameters" en cliquant sur "+" et lorsque j'ajouter une signature, je dois également connaitre le nom de l'opération slélectionnée.

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

Discussions similaires

  1. Passage de données à un champ de formulaire
    Par thoughtless dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/12/2009, 10h02
  2. [DOM] Copier un champ d'un formulaire à l'autre
    Par bobby77 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 10/01/2008, 11h16
  3. [MySQL] 2 champs de formulaire pour un champ dans la base de donnée
    Par shnouf dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/09/2007, 11h19
  4. [DOM] Effacer un champ d'un formulaire
    Par jadorelescss38 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 04/04/2007, 22h37
  5. Réponses: 3
    Dernier message: 27/09/2006, 19h50

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