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 :

Checkbox qui ne se met pas à jour


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Par défaut Checkbox qui ne se met pas à jour
    Bonjour,

    J'ai une page html qui est un tableau (lignes x colonnes) et je voudrais sortir sous forme excel les lignes que l'utilisateur aura coché.
    J'ai donc un formulaire avec plein de checkbox.Chacune est en tête d'une ligne dans la table.
    Voici le onclick de mon formulaire : "getChecked(this);this.parentNode.submit()"
    Le submit() lance un script Perl défini dans le "action" du formulaire.
    Lorsque l'on clique une ou plusieurs checkbox, puis que l'on clique sur "submit",cela lance un petit script javascript qui récupère les indices des lignes cochées, construis un input de type hidden que j'ajoute au formulaire puis qui lance un script Perl par la commande javascript this.parentNode.submit()
    Au premier tour tout va bien.
    L'utilisateur sélectionne les lignes 3 et 4 : elles sont bien retrouvées dans le document Excel généré.
    L'utilisateur ajoute ensuite la ligne 8 puis refait un submit : c'est toujours les lignes 3 et 4 qui sortent dans le document Excel !
    L'utilisateur décoche tout puis coche la ligne 1 : c'est encore les lignes 3 et 4 qui sortent !
    Comment se fait-il que mon getChecked(this) ne prenne pas en compte les nouvelles lignes cochées ?
    Je pourrais faire un script pour tout décocher mais si mon utilisateur a coché 25 éléments, sorti une première feuille Excel, puis veut ajouter 5 éléments pour sortir une deuxième feuille, je ne veux pas lui faire tout recocher ensuite !!!
    Donc ma principale question est pourquoi mon script ne prend pas en compte les cases cochées/décochées après le premier submit.
    Voici le code ma fonction.
    Le paramètre "elt" en argument est le formulaire lui-même.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function getChecked(elt) {
        var checkboxes = document.getElementsByName('chkbx') ;
        var tab = new Array ;
        for (var i=0; i<checkboxes.length; i++) {
            if ( checkboxes[i].checked == true ) tab.push(checkboxes[i].value) ;
        }
        var ret = tab.join('|') ;
        var field = document.createElement("input");
        field.type = "hidden";
        field.name = "list" ;
        field.value = ret ; 
        elt.appendChild(field) ;
    }
    Merci pour vos lumières !

  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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    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
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Merci pour ta réponse, mais je ne la comprends pas.
    J'ai regardé ton lien, c'est une succession de réponses entre Rédacteur/Modérateur, trop pointu pour moi !!!
    Et je n'y ai pas vu de rapport avec mon problème donc si tu peux être plus explicite, merci.
    De plus nous fonctionnons en interne avec Firefox.
    Crois-tu que le problème vienne de ?
    Parce que dans mon script Perl derrière, je récupère bien un paramètre "list" avec mes données, mais cela ne fonctionne qu'au premier tour, le paramètre n'est pas mis à jour ensuite...

  4. #4
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    tu incrémentes le name coté serveur ?
    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 !

  5. #5
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    tu incrémentes le name coté serveur ?
    euh, non je n'incrémente pas le name, je récupère juste sa valeur.
    C'est une chaine de caractères : des éléments séparés par un |
    Ce sont en fait les indices de mes checkbox.

  6. #6
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    oui mais si tu rajoutes un element coté client , cote serveur tu auras un name de plus ..
    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 !

  7. #7
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    On dirait qu'à partir du deuxième passage il crée un nouveau champ hidden contenant les nouvelles valeurs cochées, mais que le précédent champ hidden existe toujours, et avec le même "name". Je pense que c'est ce que soupçonnait SF, d'où sa question. ^^

    Fais un essai en supprimant un éventuel champ hidden préexistant avant de le créer.
    Code javascript : 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 getChecked(elt) {
        var ex = document.getElementById("hiddenCheck");
        if (ex) elt.removeChild(ex);
        var checkboxes = document.getElementsByName('chkbx') ;
        var tab = new Array ;
        for (var i=0; i<checkboxes.length; i++) {
            if ( checkboxes[i].checked == true ) tab.push(checkboxes[i].value) ;
        }
        var ret = tab.join('|') ;
        var field = document.createElement("input");
        field.type = "hidden";
        field.name = "list" ;
        field.id = "hiddenCheck"
        field.value = ret ; 
        elt.appendChild(field) ;
    }

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 08/07/2008, 10h36
  2. [MySQL] Date qui ne se met pas à jour
    Par caro93150 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/06/2008, 20h01
  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. Réponses: 2
    Dernier message: 05/10/2006, 08h24
  5. Combobox.text qui ne se met pas à jour
    Par davels dans le forum Delphi
    Réponses: 6
    Dernier message: 21/08/2006, 10h29

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