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 :

[html-form] mon groupe de bouton radio ne change pas de valeur !


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 45
    Points
    45
    Par défaut [html-form] mon groupe de bouton radio ne change pas de valeur !
    Bonsoir à tous,

    Je poste dans cette section car l'origine du problème est un élément html de formulaire, mais comme cette variable est traitée via php et ajax, finalement je ne sais pas trop où poster...

    Voilà, j'ai un form tout bête :
    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
    <form method="post" action="verif_form_ajout.php" onsubmit="validFormulaireAjout(this.form);return false;" name="formulaire" id="formulaire" enctype="multipart/form-data">
      <p>
        <label for="titre">Titre article :</label>
        <input id="titre" name="titre" type="text" />
     </p>
      <p>
        <label for="rubrique">Rubrique :</label>
        <input id="rubrique" name="rubrique" value="Ma rubrique" type="text" />
      </p>
      <p>
        <label for="categorie">Catégorie :</label>
        <select id="categorie" name="categorie" size="1">
          <option value="0" selected="selected">Choisissez...</option>
          <option value="1">Cat 1</option>
          <option value="2">Cat 2</option>
          <option value="3">Cat 3</option>
          <option value="4">Cat 4</option>
          <option value="5">Cat 5</option>
          <option value="6">Cat 6</option>
        </select>
      </p>
      <p>
        <label for="contenu">Contenu de l'article :</label>
        <textarea name="contenu" id="contenu"></textarea>
      </p>
      <p>
        <label for="statut_article">Marquer l'article comme :</label>
        <input checked name="statut_article" id="statut_article" value="Publie" type="radio" /> publié<br />
        <input name="statut_article" id="statut_article" value="Archive" type="radio" /> archivé
      </p>
      <p>
        <input name="un_truc_cache1" id="un_truc_cache1" value="valeur_un_truc_cache1" type="hidden" />
        <input name="un_truc_cache2" id="un_truc_cache2" value="valeur_un_truc_cache2" type="hidden" />
        <input name="submit" value="Enregistrer" title="Sauvegarder l'article" type="submit" />
      </p>
    </form>
    (ce sont les boutons radio qui me posent pb... voir lignes de code en rouge)

    NB : les résultats de ce formulaire sont traités en AJAX via la fonction "validFormulaireAjout(this.form)" et le script "verif_form_ajout.php", mais je ne pense pas que le pb vienne de là...

    Comme vous pouvez le voir aussi, l'un des boutons radio est coché par défaut au chargement du formulaire ("publié" par défaut, et si l'utilisateur ne le veut pas il peut choisir ensuite "archivé").

    Donc le fameux problème :

    Quand je soumets le formulaire à mon script "verif_form_ajout.php", celui-ci teste si isset($_REQUEST['statut_article']). Si OK, je fais un echo sur sa valeur...

    Or, quel que soit le bouton sélectionné pendant le remplissage du form (càd que l'on choisisse "Publié" ou "Archivé"), la valeur renvoyée reste la même que celle qui avait été sélectionnée par défaut (checked) : ainsi, si j'envoie mon form après avoir choisi "Archivé", la valeur (echo) de $_REQUEST['statut_article'] reste égale à "Publie" !!!

    Ce défaut de MAJ de valeur me dépasse complètement, même après moultes recherches sur le net...
    Alors si vous avez la connaissance ou un retour d'expérience sur ce "mystère", merci de me le faire partager !!!
    Merci @+

  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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onsubmit="validFormulaireAjout(this.form);return false;"
    Je comprends pas trop ce que tu cherches à faire... Le onsubmit renvoie toujours false, donc ton formulaire (pour peu que JavaScript soit activé) ne peut pas être soumis. Comment tu fais pour récupérer des valeurs ?

  3. #3
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Bonjour,

    Citation Envoyé par Bovino Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onsubmit="validFormulaireAjout(this.form);return false;"
    (...) Le onsubmit renvoie toujours false, donc ton formulaire (pour peu que JavaScript soit activé) ne peut pas être soumis. Comment tu fais pour récupérer des valeurs ?
    Très bonne remarque de Bovino à laquelle j'ajoute que probablement c'est la fonction validForlmulaireAjout() qui envoie les données.

    En exécutant ton formulaire en local (en le modifiant légèrement), j'arrive à la conclusion suivante que ce n'est pas le formulaire le fautif mais un autre coupable qui reste à débusquer.

    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
     
    <?php
        if (isset($_POST['submit']))
        {
            echo '<pre>';
            print_r($_POST);
            echo '</pre>';
        }
    ?>
    <!--<form method="post" action="verif_form_ajout.php" onsubmit="validFormulaireAjout(this.form);return false;" name="formulaire" id="formulaire" enctype="multipart/form-data">-->
    <form method="post" action="" name="formulaire" id="formulaire" enctype="multipart/form-data">
      <p>
        <label for="titre">Titre article :</label>
        <input id="titre" name="titre" type="text" />
     </p>
      <p>
        <label for="rubrique">Rubrique :</label>
        <input id="rubrique" name="rubrique" value="Ma rubrique" type="text" />
      </p>
      <p>
        <label for="categorie">Catégorie :</label>
        <select id="categorie" name="categorie" size="1">
          <option value="0" selected="selected">Choisissez...</option>
          <option value="1">Cat 1</option>
          <option value="2">Cat 2</option>
          <option value="3">Cat 3</option>
          <option value="4">Cat 4</option>
          <option value="5">Cat 5</option>
          <option value="6">Cat 6</option>
        </select>
      </p>
      <p>
        <label for="contenu">Contenu de l'article :</label>
        <textarea name="contenu" id="contenu"></textarea>
      </p>
      <p>
        <label for="statut_article">Marquer l'article comme :</label>
        <input checked name="statut_article" id="statut_article" value="Publie" type="radio" /> publié<br />
        <input name="statut_article" id="statut_article" value="Archive" type="radio" /> archivé
      </p>
      <p>
        <input name="un_truc_cache1" id="un_truc_cache1" value="valeur_un_truc_cache1" type="hidden" />
        <input name="un_truc_cache2" id="un_truc_cache2" value="valeur_un_truc_cache2" type="hidden" />
        <input name="submit" value="Enregistrer" title="Sauvegarder l'article" type="submit" />
      </p>
    </form>
    J'utilise $_POST car la méthode est bien spécifiée en clair: method="post". Quand je valide ce formulaire les données sont bien transmises selon ce que j'ai choisi.

    Comme visiblement le problème ne vient pas de ce formulaire mais d'alleurs, pouvez-vous poster ici les codes javascript de la fonction validFormulaireAjout() et du script PHP qui reçoit et traite les données ?

    Ceci pour mieux vous aider.

    Cordialement,
    Mahefasoa

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 45
    Points
    45
    Par défaut
    Re !

    Mon form est encapsulé dans une DIV id="formulaire_ajout".

    La fonction validFormulaireAjout(this.form) passe les variables au script "verif_form_ajout.php" pour traitement et injection du résultat dans la div "formulaire_ajout :

    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 validFormulaireAjout(){
     
      var xhr = getXhr();
      var div = 'formulaire_ajout';
      xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status == 200){
          reponse = xhr.responseText;
          document.getElementById(div).innerHTML = reponse;
        }
      }
      xhr.open("POST","verif_form_ajout",true);
      xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      titre_art = document.getElementById('titre').value;
      rubrique_art = document.getElementById('rubrique').value;
      categ_art = document.getElementById('categorie').value;
      contenu_art = document.getElementById('contenu').value;
      statut_art = document.getElementById('statut_article').value;
      cache_1 = document.getElementById('un_truc_cache1').value;
      cache_2 = document.getElementById('un_truc_cache2').value;
      xhr.send("tit="+titre_art+"&rub="+rubrique_art+"&cat="+categ_art+"&cont="+contenu_art+"&stat="+statut_art+"&cach1="+cache_1+"&cach2="+cache_2);
    }
    Et c'est dans mon script "verif_form_ajout.php" que je récupère et traite ces données, je ne pense pas qu'il soit utile de vous le donner. Considérons donc que je ne fais qu'un echo des variables dans ce script.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (isset($_REQUEST['titre'])) {$titre=$_REQUEST['titre'];} else {$titre= "";}
    if (isset($_REQUEST['rub'])) {$rub=$_REQUEST['rub'];} else {$rub= "";}
    ...etc (idem pour toutes les variables)
    echo 'titre : '.$titre.'<br />rubrique : '.$rub.(... etc idem pour toutes les variables)
    Quand je fais un echo sur toutes les variables, SEULE la variable STATUT_ARTICLE garde l'ancienne valeur par défaut ('Publie'), alors que dans le form j'ai bien choisi le bouton 'Archive' avant de le soumettre...
    Et je n'ai aucune erreur d'exécution ni en php ni en javascript (test sous firefox et sa console d'erreur)

    Voilà...

    Merci pour votre aide

  5. #5
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Bonjour,

    Et je crois avoir vu juste car le souci se trouve dans javascript, pas ailleurs!
    Citation Envoyé par Marmotton76 Voir le message
    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 validFormulaireAjout(){
     
      var xhr = getXhr();
      var div = 'formulaire_ajout';
      xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status == 200){
          reponse = xhr.responseText;
          document.getElementById(div).innerHTML = reponse;
        }
      }
      xhr.open("POST","verif_form_ajout",true);
      xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      titre_art = document.getElementById('titre').value;
      rubrique_art = document.getElementById('rubrique').value;
      categ_art = document.getElementById('categorie').value;
      contenu_art = document.getElementById('contenu').value;
      statut_art = document.getElementById('statut_article').value;
      cache_1 = document.getElementById('un_truc_cache1').value;
      cache_2 = document.getElementById('un_truc_cache2').value;
      xhr.send("tit="+titre_art+"&rub="+rubrique_art+"&cat="+categ_art+"&cont="+contenu_art+"&stat="+statut_art+"&cach1="+cache_1+"&cach2="+cache_2);
    }
    La variable statut_art
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statut_art = document.getElementById('statut_article').value;
    prend la valeur de l'objet dont l'ID est "statut_article". Remarquez que dans votre code HTML, deux objets ont cet ID.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <p>
        <label for="statut_article">Marquer l'article comme :</label>
        <input checked name="statut_article" id="statut_article" value="Publie" type="radio" /> publié<br />
        <input name="statut_article" id="statut_article" value="Archive" type="radio" /> archivé
      </p>
    Pour apporter une solution à votre problème, il suffit de chercher le nom et non pas l'ID car en prenant en compte l'ID, il ne trouvera que le premier. Logique, étant donné qu'un ID est sensé d'être unique. Dans la partie affectation à la variable statut_article sera modifiée comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statut_art = document.getElementsByName('statut_article').value;
    [EDIT]: Assurez-vous que ce nom est aussi unique afin d'éviter un éventuel quiproquo!

    Cordialement,
    Mahefasoa

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 070
    Points : 44 672
    Points
    44 672
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statut_art = document.getElementsByName('statut_article').value;
    attention, cela retournera undefined en vertu du fait que la méthode getElementsByName retourne une nodeList donc n'a pas de value.

    Il faut parcourir cette nodeList et conserver la value de l'élément coché.

  7. #7
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Tout à fait! Et tu as raison.
    Tu dois alors initialiser la variable statut_article à une valeur par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statut_article = "Publie"; //par exemple
    Ensuite, tu dois parcourir le nodelist pour savoir lequel de tes inputs radio est coché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (var i = 0; i < document.getElementsByName("statut_article").length; i++) {
        if (document.getElementsByName("statut_article")[i].checked)
        {
            statut_article = document.getElementsByName("statut_article")[i].value;
        }
    }
    Cela devrait corriger l'affaire.

    Cordialement,
    Mahefasoa

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 45
    Points
    45
    Par défaut
    Bonjour !

    Mais que ch'suis bête ! J'avais zappé la nature même des boutons radios (même id/nom, plusieurs choix) !

    Un GRAND merci à vous deux, Mahefasoa et NoSmoking, maintenant je récupère bien les bonnes valeurs de mon form !

    Bon dimanche @+

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/11/2007, 09h01
  2. Valeur d'un groupe de boutons radio non sélectionnés ??
    Par michaelbob dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/11/2005, 16h27
  3. [Js/HTML] mettre en évidence un bouton radio (couleur ou ..)
    Par michaelbob dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/10/2005, 14h26
  4. [Débutant][Netbeans 4.1]Groupe de boutons RADIO
    Par Terminator dans le forum NetBeans
    Réponses: 1
    Dernier message: 12/09/2005, 16h22
  5. [JPanel] ajouter un groupe de boutons radio
    Par ummon99 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 25/04/2005, 14h42

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