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 :

value d'un champ texte dont le name est sous forme de tableau


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 130
    Points
    130
    Par défaut value d'un champ texte dont le name est sous forme de tableau
    Bonjour,

    J'ai des champs textes (construis dynamiquement par PHP) dont le name est sous forme de tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <form name="formulaire" method="post">
    <input type="text" name="carte[0]" value="" />
    <input type="text" name="carte[1]" value="" />
    <input type="text" name="carte[2]" value="" />
    <input type="text" name="carte[3]" value="" />
    ...
    </form>
    Je souhaite récupérer en javascript la value de un ou plusieurs champs texte. Je pensais bêtement que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var carte = document.formulaire.carte[0].value;
    fonctionnerait... Mais non.
    Je cite l'erreur : document.formulaire.carte[0] is undefined

    Me semblait avoir déjà utiliser ça de cette manière... mais faut croire que non...

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    C'est un problème de compréhension de ce que tu écris.
    Quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.formulaire.carte[0]
    tu recherches, dans le formulaire appelé "formulaire" (au passage, pas terrible comme nom ) la collection d'éléments appelés "carte" et dans cette collection, récupérer le premier élément (de rang 0).

    Pour récupérer l'élément dont le nom est "carte[0]", tu ne peux donc pas utiliser cette syntaxe, il faut donc faire autrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.formulaire.elements['carte[0]']
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 130
    Points
    130
    Par défaut
    Ha oui ok, je comprends ! Effectivement j'aurais fait de cette manière pour choisir un bouton radio d'une collection de bouton radio par exemple. En fait pour javascript "carte[0]" n'est pas un tableau car le [0] fait partie du nom du champ.
    Merci beaucoup !

    PS : Mon formulaire s'appelle en fait "blocage". J'ai mis un nom un peu idiot quand j'ai rédigé mon message ici. Je t'accorde volontiers que formulaire est pas terrible !

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    je me permets de relancer le sujet car j'ai à peu près le même pb et je bloque sur mon code

    j'ai un formulaire généré dynamiquement un peu comme sur cette exemple
    sauf que j'aimerais vérifier si les champs sont remplis ou nom

    donc sur le onsubmit j'ai une fonction qui vérifie le formulaire mais ça ne fonctionne pas :

    ( pour le moment j'essaie de me contenter d'afficher les valeurs de mes input)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function valid_formulaire(form) { 
     
    var t_tableau_oblig = document.form.elements['tableau_oblig[]'];
     
    for(i=0;i<t_tableau_meta.length;i++) {
    alert(t_tableau_oblig[i].value);
    }
    }
    là pour le moment ça bloque sur t_tableau_meta.length
    ( Erreur : 'length' a la valeur Null ou n'est pas un objet. )

    Merci

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 159
    Points : 91
    Points
    91
    Par défaut
    Si c'est un copié collé direct de ton code, cela me semble normal que ça ne fonctionne pas.

    tu récupère tes valeurs dans t_tableau_oblig et tu utilise par la suite t_tableau_meta.

    Les noms me semblent différents ^^

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Oups non en fait j'ai pas voulu copier tout mon code en fait

    donc j'ai copié qu'une partie du code

    mais je l'ai mal copié

    donc en résumé même avec t_tableau_oblig.length ça ne fonctionne pas ...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 159
    Points : 91
    Points
    91
    Par défaut
    Bah sinon, la variable form, tu la passe en argument de ta fonction.
    Donc, document.form ne sert à rien. Met directement form si c'est bien le formulaire que tu passe à la méthode.

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    j'ai testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function valid_formulaire(form) { 
     
    var t_tableau_oblig = form.elements['tableau_oblig[]'];
     
    for(i=0;i<t_tableau_oblig.length;i++) {
    alert(t_tableau_oblig[i].value);
    }
    }
    mais ça ne fonctionne toujours pas j'ai la même erreur que précédemment...

  9. #9
    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 637
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    je parie que dans ton html tu as mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    name='tableau_oblig[0]'
    name='tableau_oblig[1]'
    au lieu de tableau_oblig[] partout
    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 !

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    exact oui pourquoi ?

    il faudrait mettre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    name='tableau_oblig[]'
    name='tableau_oblig[]'

  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 637
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    au lieu de tableau_oblig[] partout
    ben c'est clair pourtant ...

    js ne reconnait pas de tableau pour les names, les crochets sont des caractères comme les autres
    le tableau n'est reconnu que coté serveur
    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
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    ben c'est clair pourtant ...


    pour vous c'est clair oui mais pas pour moi

    après correction ça fonctionne parfaitement, merci pour votre aide

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par cyberhunter
    pour vous c'est clair oui mais pas pour moi
    Pourtant, ça a été expliqué juste avant ton premier message
    Citation Envoyé par Bovino Voir le message
    C'est un problème de compréhension de ce que tu écris.
    Quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.formulaire.carte[0]
    tu recherches, dans le formulaire appelé "formulaire" (au passage, pas terrible comme nom ) la collection d'éléments appelés "carte" et dans cette collection, récupérer le premier élément (de rang 0).

    Pour récupérer l'élément dont le nom est "carte[0]", tu ne peux donc pas utiliser cette syntaxe, il faut donc faire autrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.formulaire.elements['carte[0]']
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    bah pas vraiment en fait

    l'histoire de declarer mon, tableau de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    name='tableau_oblig[]'
    name='tableau_oblig[]'
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    name='tableau_oblig[0]'
    name='tableau_oblig[1]'
    moi je pensais qu'on pouvait déclarer le tableau un peu comme on voulait en fait

  15. #15
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    bonjour je conseille toujours de passer par des id
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     <form name="formulaire" method="post">
    <input type="text" id="carte_0" name="carte[0]" value="" />
    <input type="text" id="carte_1" name="carte[1]" value="" />
    <input type="text" id="carte_2" name="carte[2]" value="" />
    <input type="text" id="carte_3" name="carte[3]" value="" />
    ...
    </form>
    du coup il n'est plus nécessaire de rechercher le champs en passant par les éléments du formulaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.formulaire.elements['carte[0]']
    mais simplement comme pour tout élément du DOM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('carte_0');
    il est très facile en php de produire un tel code HTML
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form name="formulaire" method="post">
    <?php for ($i=0; $i<10; $i++) {?>
    <input type="text" id="carte_<? php echo($i); ?>" name="carte[<? php echo($i); ?>]" value="" />
    <?php } ?></form>
    A+JYT

  16. #16
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    @Sekaijin : pourquoi pas les id faudrait que je teste

    par contre autre question pourquoi je ne peux utiliser un tableau qu'avec une seul valeur ?

    c'est à dire si mon formulaire ne comporte qu'un seul input, javascript me dit que mon tableau est undefined

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="text" name="tableau_oblig[]" value="" />
    alors que si j'ai plusieurs input ça passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <input type="text" name="tableau_oblig[]" value="" />
    <input type="text" name="tableau_oblig[]" value="" />
    il y a une explication ?

    Merci

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

Discussions similaires

  1. [AC-97] Concatenation de champs texte, dont 1 qui peut être sans valeur.
    Par cacoubalboa dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/08/2010, 15h26
  2. intervenir sur un champ texte à partir du name et de l'ID
    Par typikal dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 23/01/2008, 15h29
  3. pb pour recuperer un champ texte dont le nom change
    Par birame dans le forum Langage
    Réponses: 3
    Dernier message: 05/06/2007, 09h57
  4. Réponses: 17
    Dernier message: 03/10/2005, 11h16
  5. changer la value d'un champ texte
    Par kidu dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/07/2005, 16h10

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