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 :

Récupérer les données d'un formulaire


Sujet :

JavaScript

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    Par défaut Récupérer les données d'un formulaire
    Bonjour,

    Je souhaite récupérer les données d'un formulaire se trouvant dans une fenêtre modal qui utilise Fancybox 2.

    J'ai trouvé ici même une fonction javascript répondant parfaitement à mes besoins

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function getDataFromForm(Form) {
        var data="";
        var key=0;
        for (key=0; key< Form .elements.length;key++) {         
             data+=escape(Form.elements[key].name)+"="+escape(Form.elements[key].value)+"&";
        }
        return data.substr(0, data.length-1);
    }
    Cela ne fonctionne pas et Firebug me renvoit l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TypeError: Form.elements is undefined
    [Stopper sur une erreur] 	
    for (key=0;key<Form.elements.length;key++) {
    J'ai essayé de mieux cibler mon formulaire, mais sans succès.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function getDataFromForm(formu) {
        var data="";
        var key=0;
        for(key = 0 ; key < document.forms[formu].elements.length ; key++) {         
             data += escape(document.forms[formu].elements[key].name)+"="+escape(document.forms[formu].elements[key].value)+"&";
        }
        return data.substr(0, data.length-1);
    }
    Si quelqu'un pouvait m'aider se serait sympa !

    Merci par 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 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 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    tu passes quoi en paramètre ?
    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 andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Ton code JS est bon, j'imagine que c'est la façon dont tu l'appelles qui n'est pas bonne.

    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
    <html>
    	<head>
    		<script type="text/javascript">
    			function getDataFromForm(formu) {
    			var data="";
    			var key=0;
    			for(key = 0 ; key < document.forms[formu].elements.length ; key++) {         
    				 data += escape(document.forms[formu].elements[key].name)+"="+escape(document.forms[formu].elements[key].value)+"&";
    			}
    			return data.substr(0, data.length-1);
    		}
    		</script>
    	</head>
    	<body>
    		<form name="nomForm">
    			<input type="text" name="text1" value="1"/>
    			<input type="text" name="text2" value="2"/>
    			<input type="text" name="text3" value="3" />
    		</form>
    	    <input type="button" onclick="alert(getDataFromForm('nomForm'))" value="appel de la fonction"/>
     
    	</body>
    </html>
    EDIT: c'est la deuxième fois en quelque minute que tu me devances Spaffy .

    A+.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    Par défaut
    En paramètre je passe le nom du formulaire.

    Mon lien se trouver sous la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a style="cursor: pointer;" onclick="javascript:dossierSuiviPiecesManquante();">Valider</a>
    Où j'appelle la fonction dossierSuiviPiecesManquante() qui utilise getDataFromForm.

    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
    function dossierSuiviPiecesManquante(){
     
        $.fancybox.close();
     
        var dataForm = getDataFromForm('piecesmanquantes') ;
     
        $.ajax({
            type: "POST",
            url: urlweb+ "ajax.php",
            data: "composant=dossiers&action=adminSuiviChangeEtat&"+dataForm ,
            processData: function(){
                $('#message').html('En cours...');
            },
            success: function(data){
                if( data.erreur == null ) {
     
                } else {
                } 
            },
            dataType: "json"
        });
    }

  5. #5
    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 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a style="cursor: pointer;" onclick="dossierSuiviPiecesManquante();return false;">Valider</a>
    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 !

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    Par défaut
    Merci bien Spacefrog !

    Ça marche (j'ai cru d'où mon edit)... même si je vois pas trop à quoi sert ce return false ;

    Sinon j'ai toujours cette erreur de firebug... est-ce normal ??

  7. #7
    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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    escape()

    Il est préférable de passer par encodeURIComponent().
    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

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    Par défaut
    Je n'ai remercié que spacefrog....

    Mea culpa ! Merci à tous

    Sinon je croyais ne plus avoir l'erreur de firebug, mais elle persiste... et j'ai réussi à récupérer les données (d'où ma joie intense) une fois mais là cela ne fonctionne plus...

  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 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    le return false inhibe le href ...

    pour ce qui est du message d'erreur, utilise une syntaxe plus rigoureuse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms[nomform].elements
    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 actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    Par défaut
    Enfin plus d'erreur avec firebug !

    Juste un dernier point... j'utilise des checkbox et je reçois la liste des checkbox qu'elles soient cochées ou non...

  11. #11
    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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Si tu regardes le code de ta fonction getDataFromForm(), tu ne cherches à aucun moment de savoir de quel type de champ il s'agit et donc, tu ne cherches pas à savoir si les champs sont cochés ou pas...

    Ceci dit, puisque tu utilises jQuery, pourquoi ne pas utiliser .serialize() qui fait ça tout seul ?
    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

  12. #12
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    A titre d'information, si tu n'as pas utilisé jQuery, tu peux tester si le tagName de l'élément est égal à "input", le type est égal à "checkbox" et s'il est coché (attribut checked).

    A+.

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    Par défaut
    Effectivement...

    J'ai donc changé pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function getDataFromForm(formu) {
        var data="";
        var key=0;
        for (key=0; key< document.forms[formu].elements.length;key++) {  
            if($('#piece_'+document.forms[formu].elements[key].value).attr('checked')){
                data+=encodeURIComponent(document.forms[formu].elements[key].name)+"="+encodeURIComponent(document.forms[formu].elements[key].value)+"&";
            }
        }
        return data.substr(0, data.length-1);
    }
    Je me rapproche du résultat mais je n'ai plus les input

    Mais je vais essayer de voir avec cette fonction serialize... Pourquoi je ne l'ai pas utilisé avant.. hum comment dire... j'aime me compliquer la vie ???

  14. #14
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Erreur de ma part, si c'est un input checkbox, et qu'il n'est pas coché, tu ne fais pas la concaténation.

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    Par défaut
    Merci à tous pour votre aide !!!!

    La fonction que j'ai posté précédemment fonctionne mais ne ramène que les checkbox cochées ! Il faudrait amélioré la condition pour récupérer les input...

    Mais pour ma part, j'ai écouté le conseil de Bovino et exploité la fonction serialize de Jquery...

    D'où quelque chose de bien plus simple :

    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
    function dossierSuiviPiecesManquante(){
     
        $.fancybox.close();
     
        var data = $("#piecesmanquantes").serialize();
     
        $.ajax({
            url: urlweb+ "ajax.php",
            type: "POST",
            data: data,
            success: function(data) {
                alert('test');
            },
            dataType: "json"
        });
    }

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/01/2020, 14h21
  2. [FORM] récupérer les données d'un formulaire
    Par dragonfly dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 04/12/2007, 13h53
  3. Réponses: 14
    Dernier message: 15/05/2007, 14h51
  4. Récupérer les données d'un formulaire
    Par rimeh dans le forum Langage
    Réponses: 12
    Dernier message: 05/02/2007, 14h58
  5. récupérer les données d'un formulaire un peu spécial
    Par Jim_Nastiq dans le forum Interfaces Graphiques
    Réponses: 12
    Dernier message: 10/07/2006, 10h53

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