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 :

[DOM] checkbox multiples avec attribut name du type nom[]


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 125
    Points : 55
    Points
    55
    Par défaut [DOM] checkbox multiples avec attribut name du type nom[]
    J'ai lu les 2 posts
    ici
    et ici

    mais dans les 2 cas la balise name du checkbox étai identique pour tous les input (pas très xhtml non?)

    je voudrais savoir comment modifier ce code pour que si je remplace
    nomchk par nomchk[], mon js fonctionne : que le clic sur le lien coche tous (et ainsi je récupèrerais mes valeurs dans un joli tableau $_POST en php après coup )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form name="formulaire">
    <input type="checkbox" name="nomchk" value="1" />1   
    <input type="checkbox" name="nomchk" value="2" /> 2   
    <input type="checkbox" name="nomchk" value="3" />3  
    </form>
    avec le js associé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <script type="text/javascript">
    function checkall(formname,checkname,thestate)
    {
    	var el_collection=eval("document.forms."+formname+"."+checkname);
    	for (c=0;c<el_collection.length;c++)
    	el_collection[c].checked=thestate;
    }
    </script>
    et l'appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <a href="javascript:checkall('formulaire','nomchk',true)">Tous</a>  
    -  <a href="javascript:checkall('formulaire','nomchk',false)">Aucun</a>

  2. #2
    Membre expérimenté
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Points : 1 595
    Points
    1 595
    Par défaut
    Bonsoir,
    Essaye ceci :
    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
    <script type="text/javascript">
    function checkall(statut)
    {
    for (i=0; i<document.getElementsByTagName("input").length; i++)
    if (document.getElementsByTagName("input")[i].type=="checkbox") {
        document.getElementsByTagName("input")[i].checked=statut ;
    }
    }
    </script>
     
    <form name="formulaire">
    <input type="checkbox" name="nomchk[]" value="1" />1   
    <input type="checkbox" name="nomchk[]" value="2" /> 2   
    <input type="checkbox" name="nomchk[]" value="3" />3  
    </form>
    <a href="javascript:checkall(true)">Tous</a>  
    -  <a href="javascript:checkall(false)">Aucun</a>

  3. #3
    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 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    document.getElementsByName('nomchk[]')[0]
    document.getElementsByName('nomchk[]')[1]
    document.getElementsByName('nomchk[]')[2]

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 125
    Points : 55
    Points
    55
    Par défaut
    D'abord, merci de vous intéresser à mon problème

    En plus c'est déjà vous qui aviez répondu aux post que je citais

    Celà étant, vos solutions ne me conviennent pas, j'en suis triste :

    j'ai sûrement été trop imprécis dans ma demande

    J'ai un formulaire qui gère des calendriers et je veux qu'à chaque mois on puisse dé/cocher toutes les dates sur un clic
    donc mon problème est plutôt du type

    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
    <form name="formulaire">
    a href="javascript:checkall(true, 'nomchkA')">Tous A</a>  
    -  <a href="javascript:checkall(false, 'nomchkA')">Aucun A</a>
     
    <input type="checkbox" name="nomchkA[]" value="1" />1   
    <input type="checkbox" name="nomchkA[]" value="2" />2   
    <input type="checkbox" name="nomchkA[]" value="3" />3  
     
     
    <a href="javascript:checkall(true, 'nomchkB')">Tous B</a>  
    -  <a href="javascript:checkall(false, 'nomchkB')">Aucun B</a>
     
    <input type="checkbox" name="nomchkB[]" value="4" />4
    <input type="checkbox" name="nomchkB[]" value="5" />5
    <input type="checkbox" name="nomchkB[]" value="6" />6
    </form>
    C'est plus compliqué non ?

    avec votre code, le clic check TOUS les checkbox, sans distinction de nom.

  5. #5
    Membre expérimenté
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Points : 1 595
    Points
    1 595
    Par défaut
    Essaye avec ce 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <script type="text/javascript">
    function checkall(statut,nom)
    {
    for (i=0; i<document.getElementsByTagName("input").length; i++)
    if (document.getElementsByTagName("input")[i].name==nom) {
        document.getElementsByTagName("input")[i].checked=statut ;
    }
    }
    </script>
    </head>
     
    <body>
    <form name="formulaire">
    <a href="javascript:checkall(true,'nomchkA[]')">Tous A</a>  
    -  <a href="javascript:checkall(false,'nomchkA[]')">Aucun A</a>
     
    <input type="checkbox" name="nomchkA[]" value="1" />1   
    <input type="checkbox" name="nomchkA[]" value="2" />2   
    <input type="checkbox" name="nomchkA[]" value="3" />3  
     
     
    <a href="javascript:checkall(true,'nomchkB[]')">Tous B</a>  
    -  <a href="javascript:checkall(false,'nomchkB[]')">Aucun B</a>
     
    <input type="checkbox" name="nomchkB[]" value="4" />4
    <input type="checkbox" name="nomchkB[]" value="5" />5
    <input type="checkbox" name="nomchkB[]" value="6" />6
    </form>

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 125
    Points : 55
    Points
    55
    Par défaut
    en lisant cette définoition du dom, j'ai eu une inspiration, et ça a l'air de fonctionner :

    j'ai fait:
    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
    <script type="text/javascript">
    function checkall(statut, nom)
    {
     chk = document.getElementsByName(nom);
     for (i=0; i<chk.length; i++)
     chk.item(i).checked = statut;
    }
    </script>
     
    <form name="formulaire">
    <input type="checkbox" name="nomchkA[]" value="10" />1   
    <input type="checkbox" name="nomchkA[]" value="20" />2   
    <input type="checkbox" name="nomchkA[]" value="30" />3  
     
    <input type="checkbox" name="nomchkB[]" value="4" />4
    <input type="checkbox" name="nomchkB[]" value="5" />5
    <input type="checkbox" name="nomchkB[]" value="6" />6
    </form>
    <a href="javascript:checkall(true, 'nomchkA[]')">Tous A</a>  
    -  <a href="javascript:checkall(false, 'nomchkA[]')">Aucun A</a>
    <a href="javascript:checkall(true, 'nomchkB[]')">Tous B</a>  
    -  <a href="javascript:checkall(false, 'nomchkB[]')">Aucun B</a>

    en tout cas merci pour ton code , je le testerai et je le garde au cas ou lre mien ne fonctionne pas sur tous les navigatteurs que je vais essayer.

    PS: peut-être que le tien est plus universel, compatible ou standard?? je ne maitrise pas les subtilités du JS et getElementsByName vs getElementsByTagName je ne sais quelle est la meilleur méthode (s'il y en a ) pour traiter ces formulaires ?

  7. #7
    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 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut


    ben oui et le code que j'ai donné plus haut alors !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByName('nomchk[]')[0]
    c'est excatement la même chose !!!

  8. #8
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    pressse pareil : il passe par item(i)!
    lol

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function checkall(statut, nom)
    {
     chk = document.forms["formulaire"].elements[nom];
     for (i=0; i<chk.length; i++)
     chk[i].checked = statut;
    }

  9. #9
    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 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Ha oui la collection des elements du form de name = nom...

    nom ="nomchk";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     document.forms["formulaire"].elements[nom][i]
    vs
    la collection des getElementsByName:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByName('nomchk[]')[i]

    N'empêche que le fondement de la solution c'est quand même de passer le nom complet avec le crochets !!!

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 125
    Points : 55
    Points
    55
    Par défaut
    Hola SpaceFrog, je ne veux pas m'attirbuer un mérite qui ne me reviendrait pas J'ai vu ta solution, certes, mais jumano avait mis une soluce complète, et toi la piste (ie pas tout le code) et comme je suis pas un gourou en js, je n'ai pas fait le rapprochement avec le code que j'ai trouvé, cf la remarque de Matthieu2000. En tout cas merci pour tout le temps que vous m'avez consacré , et aussi pour la rapidité de vos réponse, ce qui n'est pas négligeable quend on à plusieurs point dans un développement qui posent problème. En tout cas ca fait un post de plus de

  11. #11
    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 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Arf !! Non !! peu importe qui trouve la solutoin, l'essentiel est de la trouver . Là n'est pas mon propos ...

    Je voulais simpelment attirer l'attention sur le fait que javascript, contrairement à php considère les [] comme des caractères normaux dasn les names ou id.

    Donc si tu as un name

    javascript le reconnaitra comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    getElementsByName("truc[]")
    //ou 
    elements("truc[]")
    et parconséquent les éléments de la collection sont:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    getElementsByName("truc[]")[i]
    ou elements("truc[]")[i]
    les crochets sont considérés comme de l'alphabétique, quelle que soit la syntaxe utilisée...

    Alors que pour php le fait de mettre les crochets coté html permet de passer un array à php...

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

Discussions similaires

  1. Validation checkbox multiples avec jquery
    Par sala69 dans le forum jQuery
    Réponses: 2
    Dernier message: 18/07/2014, 09h29
  2. struts <html:form/> attribut name et type
    Par hiddouche dans le forum Struts 1
    Réponses: 1
    Dernier message: 01/03/2010, 15h43
  3. [DOM] Changement de l'attribut name dynamique
    Par Metal3d dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 25/06/2008, 16h39
  4. [XSLT] problème avec attribut name
    Par hippoX dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 17/04/2007, 17h26
  5. Balise form - problème attributs name et type
    Par michihala dans le forum Struts 1
    Réponses: 3
    Dernier message: 03/04/2006, 17h17

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