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 :

Effacement champs lors d'ajout d'autre


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 52
    Par défaut Effacement champs lors d'ajout d'autre
    Bonjour,

    Pour une publication, je peux avoir un ou plusieurs auteur/editeur.
    Donc dans le formulaire j'ai créer un bouton "+" pour pouvoir ajouter autant qu'il en faut.
    Tout fonctionne bien mais y a un hic.
    A chaque fois que le clique sur le bouton "+" pour ajouter un auteur, cela efface nom/prenom etc des autres auteurs déjà rempli ce qui est très gênant.

    Pourquoi cela ?
    Y a-t-il une parade et eviter cela ?

    Code coté HTML :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div id="addInput_auteur" class="addInput_auteur"></div>
    	<label for="add_Author" class="label_aut+">
    		<input type="button" name="+" value="+" id="add_Author" class="btn_add" onclick="add_auteur();">
    	</label>

    Code coté 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
    function add_auteur(){
    	var input = addInput_auteur.innerHTML;
    	//addInput.innerHTML = input + '<input type="text" name="ch_toto[]" />\n';
    	var text = '<label class="label_type_c">Type contribute:<abbr class="required" title="required">*</abbr>:';
    	text += '<SELECT name="ch_type_contr[]" id="ch_type_contr" size="1">';
    	text += '<option value="" >select</option>';
    	text += '<option value="author">author</option>';
    	text += '<option value="editor">editor</option>';
    	text += '<option value="both">both</option></select></label>';
    	text += '<label class="label_autN"> first name:<abbr class="required" title="required">*</abbr>:';
    	text += '<input type="text" name="ch_auteur_fn[]" id="ch_auteur_fn" maxlength="45"></label>';
    	text += '<label class="label_midN">mid. name:';
    	text += '<input type="text" name="ch_auteur_mn[]" id="ch_auteur_mn" maxlength="8"></label><br/>';
    	text += '<label class="label_lastN">last name:<abbr class="required" title="required">*</abbr>:';
    	text += '<input type="text" name="ch_auteur_ln[]" id="ch_auteur_ln" maxlength="45"></label>';
    	addInput_auteur.innerHTML = input + text + '\n<br>';
    }

    Merci de votre aide

  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 : 55
    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
    Tout fonctionne bien mais y a un hic.
    Donc en fait, tout ne fonctionne pas bien quoi...

    A chaque fois que le clique sur le bouton "+" pour ajouter un auteur, cela efface nom/prenom etc des autres auteurs déjà rempli
    Oui, c'est exactement ce que tu demandes de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addInput_auteur.innerHTML = input + text + '\n<br>';
    Tu demandes bien de remplacer le contenu, pas de le concaténer à l'existant.
    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 averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 52
    Par défaut
    Tout fonctionne bien mais y a un hic.
    Donc en fait, tout ne fonctionne pas bien quoi...
    Ba coté programmation, tout fonctionne, juste coté confort utilisateur

    Tu demandes bien de remplacer le contenu, pas de le concaténer à l'existant.
    Ah, et comment concatène les nouveaux champs à l'existant ?

  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 : 55
    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
    Bah, en JavaScript, la concaténation, ça se fait avec +.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addInput_auteur.innerHTML += input + text + '\n<br>';
    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 averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 52
    Par défaut
    Marche pas et c'est même pire.
    C'est efface toujours et au lieu d'ajouter 1 auteur ça ajoute 2.

    (désolé suis pas très bon en JS)

  6. #6
    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 : 55
    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
    Arf... au temps pour moi, j'avais mal lu le 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
    function add_auteur(){
    	var text = '<label class="label_type_c">Type contribute:<abbr class="required" title="required">*</abbr>:';
    	text += '<SELECT name="ch_type_contr[]" id="ch_type_contr" size="1">';
    	text += '<option value="" >select</option>';
    	text += '<option value="author">author</option>';
    	text += '<option value="editor">editor</option>';
    	text += '<option value="both">both</option></select></label>';
    	text += '<label class="label_autN"> first name:<abbr class="required" title="required">*</abbr>:';
    	text += '<input type="text" name="ch_auteur_fn[]" id="ch_auteur_fn" maxlength="45"></label>';
    	text += '<label class="label_midN">mid. name:';
    	text += '<input type="text" name="ch_auteur_mn[]" id="ch_auteur_mn" maxlength="8"></label><br/>';
    	text += '<label class="label_lastN">last name:<abbr class="required" title="required">*</abbr>:';
    	text += '<input type="text" name="ch_auteur_ln[]" id="ch_auteur_ln" maxlength="45"></label>';
    	addInput_auteur.innerHTML += text + '\n<br>';
    }
    Sauf qu'en faisant ça, tu obtiens des id identiques dans la page, ce qui n'est pas autorisé.
    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

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 52
    Par défaut
    J'ai enlevé les id mais cela ne change rien.

    Y a-t-il une façon simple pour avoir des id différent dans ce cas ?

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 52
    Par défaut
    Bon j'en suis là :
    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
    function add_auteur()
    {
    	//var input = addInput_auteur.innerHTML; 
     
    	var text = '<label class="label_type_c">Type contribute:<abbr class="required" title="required">*</abbr>:';
    	text += '<SELECT name="ch_type_contr[]" size="1">'; 
    	text += '<option value="" >select</option>';
    	text += '<option value="author">author</option>';
    	text += '<option value="editor">editor</option>';   
    	text += '<option value="both">both</option></select></label>';	
    	text += '<label class="label_autN"> first name:<abbr class="required" title="required">*</abbr>:'; 
    	text += '<input type="text" name="ch_auteur_fn[]" maxlength="45"></label>';  
    	text += '<label class="label_midN">mid. name:';
    	text += '<input type="text" name="ch_auteur_mn[]" maxlength="8"></label><br/>';
    	text += '<label class="label_lastN">last name:<abbr class="required" title="required">*</abbr>:';
    	text += '<input type="text" name="ch_auteur_ln[]" maxlength="45"></label>';
     
    	addInput_auteur.innerHTML += text + '\n<br>';
    }
    Mais toujours le même problème : les champs s'effacent lors d'ajout d'un nouvel auteur.
    Les id ont été enlevé (en attendant de trouver une solution pour avoir un id unique à chaque fois).

  9. #9
    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 : 55
    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
    Nom de Zeus ! Je viens de comprendre.
    Quand tu dis que les champs s'effacent, c'est qu'ils perdent leur valeur et non qu'ils disparaissent du formulaire.

    Effectivement, avec ta méthode, c'est logique puisque lorsque tu modifies la valeur d'un champ, tu ne modifies pas le code HTML.
    Tu as plusieurs méthodes possibles pour pallier ce désagrément.

    • Utiliser les méthodes du DOM (createElement(), appendChild(), etc.).
    • Avant la modification de la div, boucler sur les champs de formulaire et si besoin, modifier leur attribut value ou selected (setAttribute()) pour les options des select.
    • Les deux méthodes précédentes étant assez fastidieuses et verbeuses, utiliser insertAdjacentHTML() :
    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 add_auteur(){
    	var text = '<label class="label_type_c">Type contribute:<abbr class="required" title="required">*</abbr>:';
    	text += '<SELECT name="ch_type_contr[]" size="1">'; 
    	text += '<option value="" >select</option>';
    	text += '<option value="author">author</option>';
    	text += '<option value="editor">editor</option>';   
    	text += '<option value="both">both</option></select></label>';	
    	text += '<label class="label_autN"> first name:<abbr class="required" title="required">*</abbr>:'; 
    	text += '<input type="text" name="ch_auteur_fn[]" maxlength="45"></label>';  
    	text += '<label class="label_midN">mid. name:';
    	text += '<input type="text" name="ch_auteur_mn[]" maxlength="8"></label><br/>';
    	text += '<label class="label_lastN">last name:<abbr class="required" title="required">*</abbr>:';
    	text += '<input type="text" name="ch_auteur_ln[]" maxlength="45"></label>';
     
    	addInput_auteur.insertAdjacentHTML('beforeend', text);
    }
    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

  10. #10
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 52
    Par défaut
    Nom de Zeus ! Je viens de comprendre.
    Quand tu dis que les champs s'effacent, c'est qu'ils perdent leur valeur et non qu'ils disparaissent du formulaire.
    Exactement, c'est vrai que je n'ai pas été très clair dessus.

    En tout cas, ça marche !!
    Merci Bovino.

    Reste plus à gérer cette histoire d'id.

  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 : 55
    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
    Pourquoi as-tu besoin d'id ?
    Sinon, une solution peut être d'utiliser un compteur que tu stockes par exemple dans le dataset de addInput_auteur et que tu incrémentes en fin de fonction.
    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
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 52
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Pourquoi as-tu besoin d'id ?
    Sinon, une solution peut être d'utiliser un compteur que tu stockes par exemple dans le dataset de addInput_auteur et que tu incrémentes en fin de fonction.
    Pour le fonctionnement même du programme à rien.

    Après il va servir un peu pour miss CSS mais surtout pour l'accessibilité numérique où on doit utilisé les balise <label> avec un for qui tape sur l'id de l'input.

    Le problème est que le formulaire est diviser en étapes avec des next/back donc je dois reconstruire la liste des auteurs.
    Sans l'id, sans fait sans problème avec une boucle for sur la longueur du tableau (tableau du name).
    Mais après pour mettre pour id au bon endroit... je voie qq chose comme ça id="nom_indice_tableau".

    Et coté JS, comment peut-on savoir le dernier indice du tableau ?

  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 : 55
    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 ce qui est des CSS, tu peux passer par une classe commune dans ce cas.
    Pour les label, n'oublie pas qu'il y a deux façons de lier un label et un champ :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <label for="ident">Libellé</label>
    <input id="ident" />
    <!-- ou alors -->
    <label>
        Libellé <input />
    </label>

    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 averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 52
    Par défaut
    Je suis presque sûr que pour l'accessibilité numérique, il y a qu'une seul façon : celle du for + id.

    cf : http://webaim.org/techniques/forms/controls

  15. #15
    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 : 55
    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
    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

  16. #16
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 52
    Par défaut
    Suivant ton lien (qui est intéressant au passage) :
    Chaque champ de formulaire doit être associé à un intitulé.

    Pour cela, procéder de la sorte.

    Utiliser <label> pour baliser chaque intitulé.
    Ajouter un attribut for sur chaque balise <label> ainsi qu'un attribut id sur chaque champ.
    Renseigner avec une valeur identique les attributs id et for de chaque couple intitulé/champ.

  17. #17
    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 : 55
    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
    Oui, je sais, j'ai vu ça après, en fait, je regardais surtout la syntaxe.
    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

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/06/2008, 11h26
  2. Copie table vers une autre et ajout d'autres champs
    Par oxygen240 dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/02/2008, 22h45
  3. [MySQL] Donner un autre nom de champ lors d'une requête SELECT
    Par greg13 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/01/2008, 17h30
  4. garder les valeurs d'un champs texte après ajout d'autres
    Par ke2007 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/09/2007, 09h28
  5. valeur d'un champ de formulaire ajouté depuis une autre page
    Par manaboko dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/12/2005, 09h29

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