Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5396 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  GetElementById

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

GetElementById

n°1251862
Profil sup​primé
Posté le 23-11-2005 à 20:51:26  answer
 

Bonjour à tous,
 
Voilà, je suis confronté au ""célèbre"" problème du cochage de plusieurs checkbox.
Aussi, chaque checkbox est composé ainsi :
 

Code :
  1. <input type='checkbox' value='4' id='case[]'>
  2. <input type='checkbox' value='3' id='case[]'>
  3. <input type='checkbox' value='6' id='case[]'>
  4. <input type='checkbox' value='8' id='case[]'>


 
J'ai un bouton Valider qui est du type

Code :
  1. <input type="button" onclick="conf()" value="Valider">


 
Et voici ma fonction JS

Code :
  1. function conf()
  2. {
  3. var cbs = document.getElementById('case[]').value;
  4. var trouve = "false";
  5. for (var i=0; i < cbs.length; i++)
  6. {
  7.  if(cbs[i].checked)
  8.  {
  9.   var trouve="true";
  10.  }
  11. }
  12. if(trouve=="true" )
  13. {
  14.  if(confirm('Voulez-vous réellement supprimer ?'))
  15.  {
  16.      suppression.submit();
  17.  }
  18. }
  19.  else
  20. {
  21.  alert('Selectionnez une case au moins.');
  22. }
  23. }
  24. </script>


 
Mais impossible de retourner les valeurs des case[]
Avec un getelementsByName ca marche nickel, mais avec un id, ca passe pas...
 
Quelqu'un voit le problème ?
Merci d'avance

mood
Publicité
Posté le 23-11-2005 à 20:51:26  profilanswer
 

n°1251878
gatsusat
Posté le 23-11-2005 à 21:06:56  profilanswer
 

getElementById comme son nom l'indique renvoi [b]UN[b] élémént par rapport à un id donné.
 
il ne va pas te retourner un tableau, sachant en plus qu'un id c'est unique dans une page, tu va avoir du mal à gerer ton truc, alors il y a pllusieurs méthodes simples
 
la première, identifier chaque élément pas un id numéroté
id="cb1", id="cb2", id="cb3"....
 
et en JS, tu parcours tes checkbox avec un for en te basant sur un idmax

Code :
  1. for i jusqu'à idmax
  2. {
  3. macheckbox = document.getElementById("cb"+i);
  4. }


 
sinon tu peux encadrer toutes tes checkbox par un div ou un fieldset
 

Code :
  1. <fieldset id="mescheckbox">
  2. <input type='checkbox' value='4'>
  3. <input type='checkbox' value='3'>
  4. <input type='checkbox' value='6'>
  5. <input type='checkbox' value='8'>
  6. </fieldset>


 
puis tu récupère ton fieldset et ensuite tu récupère tous les inputs de ce fieldset qui en principe sont des checkbox
 

Code :
  1. var maboiteAcheckbox = document.getElementById("mescheckbox" );
  2. var toutesmescheckbox = maboiteAcheckbox.getElementsByTagName("INPUT" );
  3. for (var i=0; i<toutesmescheckbox.length;i++) {
  4.   action sur toutesmescheckbox[i]....
  5. }


 
getElementsByName est en principe une méthode vouée à disparaître,
un id c'est unique dans une page
getElementsByTagName renvoi un tableau d'éléments contenus dans un élément, exemple, on a renvoyé tous les INPUT contenus dans le fieldset
tu peux remplacer ton div par un fieldset si tu en as envie


---------------
Les CSS c'est bon mangez-en
n°1251882
masklinn
í dag viðrar vel til loftárása
Posté le 23-11-2005 à 21:09:39  profilanswer
 


1- Cet ID est invalide
2- Un ID est un identificateur unique pour un élément unique d'une page


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1251888
gatsusat
Posté le 23-11-2005 à 21:18:23  profilanswer
 

masklinn grilled


---------------
Les CSS c'est bon mangez-en
n°1252100
Profil sup​primé
Posté le 24-11-2005 à 11:03:08  answer
 

LOL et merde !
C'est tellement logique que j'ai complètement zappé l'unicité de l'ID. Merci de l'avoir souligner :)
 
Ceci dit j'ai toujours aucune réaction lors de la vérification...
Voilà le code modifié.

Code :
  1. <fieldset id="case">
  2. <input type='checkbox' value='55'>
  3. <input type='checkbox' value='27'>
  4. </fieldset>
  5. Fonction Javascript
  6. function conf()
  7. {
  8. var tmp = document.getElementById("case" );
  9. var cbs = tmp.getElementsByTagName("INPUT" );
  10. for (var i=0; i < cbs.lenght; i++)
  11. {
  12.  alert(cbs[i]);
  13. }
  14. }


DOnc quand j'appuie sur le bouton Valider, l'alert se déclenche meme pas.
Je m'attendais même pas à avoir un contenu valid, mais simplement une alert, et bien même pas.
Donc en toute logique, le cbs.lenght = 0 pour pas entrer dans la boucle.
Maintenant je comprends pas pourquoi il n'y a aucun paramètre de rentrer dans le cbs lol !
 
Ah vi, et au passage, je compte récupérer la variable dans un traitement derrière... Mon Form est en POST.. je la récupère donc dans $_POST['case']  et ensuite par une boucle qui fera le un traitement basique "n" fois, le n défini par un i< count($_POST['case']) ?
Bon ca c'est pour après hein :)
 
Merci encore.

n°1252158
gatsusat
Posté le 24-11-2005 à 11:57:24  profilanswer
 

tu as regardé ce que te donne la console javascript de Firefox ?
car à mon avis tu as un problème dans le code JS global de ta page
 
et puis une bonne fois pour tout, utilise plutôt des double quotes pour les valeurs (" " ) au lieu des simples quote (' '). ca evitera des petits soucis
 et en PHP les strings tu les entoures avec des simple quotes.
 
et au passage je me rappelle po t'avoir dir lenght mais je t'avais dit length.
 
tu mérites le fouet !
 


---------------
Les CSS c'est bon mangez-en
n°1252182
Profil sup​primé
Posté le 24-11-2005 à 12:32:06  answer
 

Code :
  1. <fieldset id="case">
  2.      <input type="checkbox" value="55">
  3.      <input type="checkbox" value="27">
  4.      </fieldset>
  5.    
  6.    
  7.      Fonction Javascript
  8.      function conf()
  9.      {
  10.          var tmp = document.getElementById("case" );
  11.          var cbs = tmp.getElementsByTagName("INPUT" );
  12.          for (var i=0; i < cbs.length; i++)
  13.          {
  14.              alert(cbs[i]);
  15.          }
  16.      }


 
Ayé :)
Ranges ton fouet stp lol
 
Bon concernant la console JS de FF, elle est vide :)
Aucune erreur, messages, avertissements.


Message édité par Profil supprimé le 24-11-2005 à 12:33:58
n°1252200
gatsusat
Posté le 24-11-2005 à 13:10:55  profilanswer
 

là ca marche en mettant tout le code dans une page
 

Code :
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <title></title>
  5. <script>
  6.      function conf()
  7.      {
  8.          var tmp = document.getElementById("case" );
  9.          var cbs = tmp.getElementsByTagName("INPUT" );
  10.          for (var i=0; i < cbs.length; i++)
  11.          {
  12.              alert(cbs[i]);
  13.          }
  14.      }
  15. </script>
  16. </head>
  17. <body>
  18. <fieldset id="case">
  19.      <input type="checkbox" value="55">
  20.      <input type="checkbox" value="27">
  21.      </fieldset>
  22. <input type="button" value="test" onclick="conf()">
  23. </body>
  24. </html>


---------------
Les CSS c'est bon mangez-en
n°1252486
Profil sup​primé
Posté le 24-11-2005 à 18:13:46  answer
 

Ah yes c'est bon .
Alors en fait le fieldset, faut bien faire attention de pas le faire entourer un "<tr><td><input value="14" type="checkbox"></td></tr>"   :D
Donc je l'ai mis entourant tout mon tableau.
 
Ah vi et j'ai rajouté un ".value" après alert('cbs[i]') pour que ca affiche la valeur ;)
 
Malheureusement le cbs.length est indéfini... ou plutot si, c'est la somme de tous mes éléments ( là c'est 5 : 4 checkbox et un bouton Supprimer)... je vois pas comment récupérer seulement les checkbox.


Message édité par Profil supprimé le 24-11-2005 à 18:18:46
n°1252498
gatsusat
Posté le 24-11-2005 à 18:28:16  profilanswer
 

t1 c koi ce code bordelique
 
le fieldset c'est un élément qui permet d'englober des éléments de formulaires !!!
autant le remplacer par un DIV
et encore mieux evite de me faire cette merde de tabelau steuplé, fais quelque chose de propre
 
jtai déjà dis que le fieldset 'ou plutot utilise DIV
ne doit englober que les checkbox pour ton boulot là
 
sinon pour récuperer que les checkbox, tu fait un length-1 puisque le 5eme élément est le submit (donc tableaudecheckbox[4]
donc dans le for il faut faire un i<tableaudecheckbox.length-1
 
mais bon j'ai po envie de voir le code HTML et JS de ta page, ca doit pas être très joli à voir


---------------
Les CSS c'est bon mangez-en
mood
Publicité
Posté le 24-11-2005 à 18:28:16  profilanswer
 

n°1252533
Profil sup​primé
Posté le 24-11-2005 à 18:52:35  answer
 

gatsusat a écrit :


jtai déjà dis que le fieldset 'ou plutot utilise DIV
ne doit englober que les checkbox pour ton boulot là


Non tu n'as jamais dit que le field ne devait entourer QUE des elements de formulaires.
Au mieux, t'as sorti ça  
[quotemsg="1252498,10,68526"]sinon tu peux encadrer toutes tes checkbox par un div ou un fieldset [/quotemsg]
Quel personne non qualifiée comme moi peut sous-entendre qu'il ne doit y'avoir QUE des checkbox  ?
 
J'ai un tableau avec dedans une boucle PHP qui génère des lignes <tr>... A chaque ligne une checkbox.
Je ne pensais pas que cela pouvait gênait en quoi que ce soit la récupération des values. C'est en bidouillant que j'ai trouvé.
 

gatsusat a écrit :


mais bon j'ai po envie de voir le code HTML et JS de ta page, ca doit pas être très joli à voir


Peut-être que des explications propres le tout amené avec un peu de pédagogie permettrait de voir moins de pages avec un code sale.


Message édité par Profil supprimé le 24-11-2005 à 18:53:32

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  GetElementById

 

Sujets relatifs
getElementByIdProbleme dácces a des id avec des [ ] et getElementById
[RESOLU]document.getElementById().innerHTML = <table>[Javascript]remplacer document.all par document.getElementbyID
document.getElementById et firefox[IE] - Problème avec getElementById()
parent.document.toto vs parent.document.getElementById("toto")document.getElementById("form2").elements[champ] has no properties
[JS] FireFox plante sur mon getElementById('xxx').innerT ext.split('.')[HTML/JS] getElementById et Textarea
Plus de sujets relatifs à : GetElementById


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)