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

AJAX Discussion :

[AJAX] saisies formulaires qui s'effacent


Sujet :

AJAX

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 66
    Points
    66
    Par défaut [AJAX] saisies formulaires qui s'effacent
    Bonjour,

    J'ai un problème d'effacement des valeurs saisies dans des <input type="text" /> d'un formulaire lorsque j'ajoute d'autres <input type"text" /> à ce même formulaire au moyen d'AJAX.

    La page test.php contient un formulaire avec une liste déroulante et une zone de saisie de texte. Sur cette page, il y a un bouton qui permet d'ajouter une ligne à ce formulaire ; la ligne ajoutée contenant une liste déroulante et une zone de saisie de texte, identique à la première ligne.

    Le bouton appelle la fonction javascript ajouter() de la page test.php

    La fonction ajouter() se charge d'appeler le script ajax.php et au moyen de l'objet XMLHttpRequest de lui transmettre les informations et de récupérer le résultat de ce script, qui a pur but d'ajouter une ligne au formulaire.

    Or, si je saisi une valeur dans un <input type"text" /> et que je clique sur le bouton pour ajouter une ligne la valeur saisie s'efface (constaté sous FF 8.0, mais pas sous IE 8).

    Voici les deux scripts :
    test.php
    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
    <html>
     
    <script type="text/javascript">
     <!--
     function ajouter() {
      xhr = new XMLHttpRequest();
      /* récupération et ajout de l'information traitée par ajax.php */
      xhr.onreadystatechange = function() {
       if (xhr.readyState == 4 && xhr.status == 200) {
        ligneSup = xhr.responseText;
        document.getElementById('a_remplir').innerHTML += ligneSup;
       }
      }
      /* envoie à ajax.php qu'on veut ajouter une ligne */
      xhr.open("POST","ajax.php",true);
       xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
       pourAjout = document.getElementById('boutton_ajout');
      xhr.send("idBoutton="+pourAjout);
     }
     // -->
    </script>
     
    <body onload="ajouter();">
     <form method="post" action="#">
      <p><input type="button" id="boutton_ajout" value="+" onclick="ajouter();" /></p>
      <div id="a_remplir">
       <!-- rempli avec ajax-->
      </div>
     </form>
    </body>
     
    </html>
    ajax.php
    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
    <?php
     header('Content-Type: text/html; charset=utf-8'); 
     if(isset($_REQUEST["idBoutton"])) {
      // normalement la liste est générée par une requête exécutée sur la base de données
      echo'
       <p>
        <select>
         <option>Item 1</option>
         <option>Item 2</option>
         <option>Item 3</option>
        </select>
        <input type="text" />
       </p>
      ';
     }
    ?>
    Quelqu'un voit où je me plante ?

  2. #2
    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,

    Si tu utilises ajax que pour générer ces éléments, je te conseille d'utiliser du simple javascript et la fonction cloneNode, c'est plus propre et performant:
    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
    <html>
    <head>
    	<title>cloneNode</title>
    	<script type="text/javascript">
    		var lineIndex=0;
    		function ajouter() {
    		 ligne = document.getElementById("line0").cloneNode(true);
    		 ligne.id="line"+(++lineIndex);
    		 document.getElementById("a_remplir").appendChild(ligne);
    		}
    	</script>
    </head>
    <body>
     
     <form method="post" action="#">
      <p><input type="button" id="boutton_ajout" value="+" onclick="ajouter();" /></p>
      <div id="a_remplir">
       <p id="line0">
        <select>
         <option>Item 1</option>
         <option>Item 2</option>
         <option>Item 3</option>
        </select>
        <input type="text" />
       </p>
      </div>
     </form>
    </body></html>
    A+.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 66
    Points
    66
    Par défaut
    En réalité, j'ai simplifié mon script pour poster ma question sur le forum, en fait la liste déroulante est remplie par une requête dans une base de données MySQL et c'est dans cette optique que j'utilise AJAX.

    Est-ce que cloneNode fonctionnera puisque les items de la liste déroulante sont générés par le PHP ?

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 66
    Points
    66
    Par défaut
    Désolé de ne pas avoir testé avant d'avoir posté la réponse précédente.
    Je viens de la faire et ça fonctionne nickel avec la liste générée par PHP.
    Merci !

    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
    <html>
    <head>
     <title>cloneNode</title>
     <script type="text/javascript">
      var lineIndex=0;
      function ajouter() {
       ligne = document.getElementById("line0").cloneNode(true);
       ligne.id="line"+(++lineIndex);
       document.getElementById("a_remplir").appendChild(ligne);
      }
     </script>
    </head>
    <body>
     <form method="post" action="#">
      <p><input type="button" id="boutton_ajout" value="+" onclick="ajouter();" /></p>
      <div id="a_remplir">
       <p id="line0">
     <?php
      try {
       $bdd = new PDO('mysql:host=localhost;dbname=test','root','');
      } catch (Exception $e) {
       die('Erreur : ' . $e->getMessage());
      }
      $requete = $bdd->query('SELECT * FROM achat LIMIT 0,5') or die(print_r($bdd->errorInfo()));
      echo '<select>';
      while ($data = $requete->fetch()) {
       echo '<option>'.$data['codeAchat'].'</option>';
      }
      $requete->closeCursor();
      echo '</select>';
     ?>
        <input type="text" />
       </p>
      </div>
     </form>
    </body></html>

  5. #5
    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
    Re, attention tes options n'ont pas de value .

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Re, attention tes options n'ont pas de value .
    Oui, c'est pris en compte par le reste du code javascript que je n'ai pas mentionné dans l'exemple, histoire de ne pas alourdir celui-ci.

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

Discussions similaires

  1. [AJAX] saisie automatique qui plante sous AJAX
    Par kosowski dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 25/06/2008, 14h35
  2. [AJAX] formulaire qui bouge au clic sur un bouton
    Par domishao dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/12/2007, 14h17
  3. AJAX - Formulaire qui ne se met pas à jour
    Par wenijah dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/11/2007, 10h31
  4. [AJAX] Saisie semi automatique dans un formulaire
    Par sebaaas dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/05/2007, 19h54
  5. champs qui s'efface lors d'une requete ajax.
    Par starr dans le forum Langage
    Réponses: 3
    Dernier message: 27/10/2006, 08h33

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