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 :

input generé par js n est pas posté avec le reste du formulaire


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 67
    Par défaut input generé par js n est pas posté avec le reste du formulaire
    Salutation amis developpeurs !
    Je planche sur un problème depuis un certain nombre de temps maintenant et n'ayant trouvé nul solution je m'en remet à vous grands manitous du javascript.

    voici mon problème: J'ai un formulaire d enregistement dans lequel je laisse l'utilisateur entrer un ou plusieur numero de telephone.
    en fait dans ce formulaire, a chaque fois que l utilisateur clique sur une petite croix, un nouveau champ est crée.
    le problème est que quand je post le formulaire , les champs que j ai généré avec javascript ne sont pas pris en compte ....
    et c'est bien embetant comme vous pouvez l'imaginer.

    Voici quelques bribes de mon code :

    le formulaire ...

    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
     
    <form cible="index.php" enctype="multipart/form-data" name="addMember" method="post">
    <table>
    <tr> 
    <td> name </td> 
    <td><input type="text" size=20 name="name" onkeyup="javascript:checkName();"/><i id="nameCheck" class="important">*</i></td>
    </tr>
    <tr> 
    <td> firstname </td> 
    <td><input type="text" name="firstname" size=15 " onkeyup="javascript:checkFirstname();"/><i id="firstnameCheck" class="important">*</i></td>
    </tr>
    <td>Phones</td> 
    <td>
    <table id="phone">
    </table>
    </td>
    </tr>
    <tr> 
    <td></td> 
    <td>
    <img heigh=18px width=18px src="images/add.jpg" style="color:red" alt="add a phone" title="click here to add a new phone line"  onclick="Javascript:createNewPhone();" />&nbsp;&nbsp;&nbsp;
    <img heigh=18px width=18px src="images/remove.png" style="color:red" alt="remove phone" title="click here to delete last phone line"  onclick="Javascript:deletePhone();" /> (add or remove a phone line)
    </td>
    </tr>
    </table>
    </form>
    le javascript qui va avec :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
     
    function createNewPhone(){
    var line= document.createElement("tr");
    document.getElementById("phone").appendChild(line);
     
    line.innerHTML="<td><input type=\"text\" name=\"PhoneNumber\" size=14 onchange=\"Javascript:checkPhone();\"/></td><td><select name=\"phoneType\" onchange=\"Javascript:checkPhone();\"><option value=\"mobile\">mobile</option><option value=\"home\">home</option><option value=\"desk\">desk</option><option value=\"undefined\">undefined</option> </select></td><td name=\"phoneCheck\" class=\"important\"> </td>";
     
     
    }
     
    function deletePhone(){
    var phone = document.getElementsByName("PhoneNumber");
     
    var line= phone[phone.length-1].parentNode.parentNode;
     
     
    line.innerHTML="";
     
     
    }
     
     
    function checkPhone(){
    var phone = document.getElementsByName("PhoneNumber");
    var check = document.getElementsByName("phoneCheck");
    var type =  document.getElementsByName("phoneType");
    var test=true;
    //create the regular expression
    var GlobalExp =/^\+?[0-9]{6,11}$/i;
    var DeskExp =/^[0-9]{3}$/i;
    var undefinedExp =/^[0-9]{3}|(\+?[0-9]{6,11})$/i;
     
    for(cpt=0;cpt<phone.length;cpt++)
    {
    switch(type[cpt].value){
     
    case "desk": Expression=DeskExp;break;
    case "undefined": Expression=undefinedExp;break;
    default: Expression=GlobalExp;break;
     
    }
     
    //chosing the regExp to use depending on the type chosen
    if(Expression.test(phone[cpt].value)){
    check[cpt].innerHTML="<img src=\"images/valid.gif\" />";
    phone[cpt].style.backgroundColor="#CCFFCC";
    }
    else{
    check[cpt].innerHTML="<img src=\"images/invalid.gif\" />";
    phone[cpt].style.backgroundColor="#FFCCCC";
    test= false;
    }
     
    }
     
     
    return test;
     
     
    }
    Bon l'affichage marche parfaitement hein
    Quand je clique sur le bouton pour ajouter une ligne ca l'ajoute
    quand je clique sur le bouton pour en supprimer ca l enleve.
    Quand je check le code sur la page html j'ai bien ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="text" onchange="Javascript:checkPhone();" size="14" name="PhoneNumber">
    mais quand je fais un var_dump de la variable post dans le fichier cible, pas d'index PhoneNumber ....
    C'est vraiment surprennant ...

    Si quelqu un a une solution je lui serais 100 fois redevable.

    Bien à vous et merci d'avance !

  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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ben c'est sûr que si tu donnes le même name à tous tes input, ça risque de poser des problèmes.
    Du coup, coté PHP, ça revient au même que de déclarer plusieurs variables avec le même nom : seule la dernière déclaration existera !

    A la rigueur, il existe une astuce qui consiste à donner comme valeur de name PhoneNumber[] qui te permettra coté PHP d'obtenir un tableau.

    Et juste pour rigoler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onkeyup="javascript:checkName();"
    si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onkeyup="crepe_suzette:checkName();"
    ça m'affichera la recette de la crêpe suzette ?
    Plus sérieusement, regarde : A quoi sert 'javascript:' dans une balise HTML ?
    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 confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 67
    Par défaut
    Bonjour et merci pour la réponse.

    Je m'attendais aussi a avoir une seule valeur de phoneNumber auquel cas j'aurais fait en sorte d'avoir un nouveau nom à chaque création de nouvelle ligne ( eh oui etant débutant j'y vais a taton).

    Le problème c'est que meme si je n est qu un seul phone number , je n ai AUCUN phone number ...dans la variable post suite à la submission de mon formulaire.

    et ceci est la base de mon problème.

    Pour ce qui est de la blague je ne sais pas vraiment quand rigoler étant donner que
    onkeyup="javascript:checkName();" remplit parfaitement sa fonction.

    J'ai visité le lien fournis et tout les inconvéniants cités ne le sont pas pour moi étant donné que le site ne sera utilisé qu'en local et est le sujet d'un projet universitaire.
    deplus cette syntaxe , obsolète d'après vous , et celle présentée par notre professeur ...

    Donc bon le jour ou je m'attaquerai à mon propre site , je me repencherai sur la question, mais pour ce problème , faisons abstraction =)

  4. #4
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Pour tout dire, ton problème peut provenir de plusieurs causes :
    • Mettre des tables dans un formulaire peut être problématique.
    • Mélange de méthodes DOM et innerHTML.
    • Génération dynamique d'attribut name problématique avec certaines versions de IE.
    • Structure de table non conforme (pas de tbody).


    Sinon
    Pour ce qui est de la blague je ne sais pas vraiment quand rigoler étant donner que
    onkeyup="javascript:checkName();" remplit parfaitement sa fonction.

    J'ai visité le lien fournis et tout les inconvéniants cités ne le sont pas pour moi étant donné que le site ne sera utilisé qu'en local et est le sujet d'un projet universitaire.
    deplus cette syntaxe , obsolète d'après vous , et celle présentée par notre professeur ...
    C'est sûr que si ce sont les profs eux-mêmes qui préconisent ça... ça explique beaucoup de choses...
    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

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 67
    Par défaut
    Je viens avec de bonnes nouvelles (pour moi seulement ^^)

    Après avoir changé plusieur chose les valeur générer sont bien passé après submission du formulaire

    cependant j'ai changé pas mal de chose et je ne sais pas ce qui à fait fonctionner le tout correctement.

    J 'ai changé le nom phoneNumber by phoneNumber[] comme suggéré par bovino
    et j ai corrigé quelques fautes dans mon html aussi

    Sur ce merci et bien à vous

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

Discussions similaires

  1. UUID donné par WMI n'est pas unique
    Par ELKOUBE dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 09/05/2012, 12h10
  2. Réponses: 4
    Dernier message: 17/04/2011, 10h40
  3. Réponses: 3
    Dernier message: 13/02/2008, 16h07
  4. Réponses: 4
    Dernier message: 19/01/2008, 02h16
  5. Réponses: 1
    Dernier message: 25/10/2006, 11h13

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