Page 1 sur 1

Cocher toutes les checkboxes d'un formulaire

Posté : 04 juin 2007, 14:34
par jed
Bonjour, j'ai écrit une fonction en js qui permet de cocher toutes les checkboxes d'un formulaire mais j'ai un problème: ces boxes portent comme nom un tableau. Le js fonctionne correctement avec un nom traditionnel mais les boxes ne se cochent pas avec un tableau. Pouvez vous m'aider svp? Voici mon code:

javascript:
var checkflag = "false";
function check(field) {
if (checkflag == "false") {
  for (i = 0; i < field.length; i++) {
  field[i].checked = true;}
  checkflag = "true";
  return "Tout décocher"; }
else {
  for (i = 0; i < field.length; i++) {
  field[i].checked = false; }
  checkflag = "false";
  return "Tout cocher"; }
}
Formulaire:
$body = "<form name=\"list_comp\" action=\"index.php\" method=\"post\">
		<table witdh=\"80%\" align=\"center\" bgcolor=\"#000000\" cellpadding=\"5\" cellspacing=\"1\">
		<tr>
			<th witdh=\"90%\" bgcolor=\"#ffffff\" align=\"center\">
				nom [modifier] [supprimer]
			</th>
			<th width=\"10%\" align=\"center\" bgcolor=\"#ffffff\">
				par défaut <input type=\"hidden\" name=\"defaut[]\" value=\"99999999999999\" /><br />
				<input type=\"checkbox\" onclick=\"this.value=check(this.form.defaut[])\"> 
			</th>
		</tr>";
		
		$query = mysql_query ('SELECT * FROM competences WHERE matiere = "'.$_GET['matiere'].'" ORDER BY nom');
		while ($competence = mysql_fetch_object ($query))
		{
			$body .= "<tr>
						<td align=\"center\" bgcolor=\"#ffffff\">
							$competence->nom [<a href=\"index.php?modifier=$competence->id\">modifier</a>] [<a href=\"index.php?supprimer=$competence->id\">supprimer</a>]
						</td>
						<td align=\"center\" bgcolor=\"#ffffff\">
							<input type=\"checkbox\" name=\"defaut[]\" value=\"$competence->id\"";
						
						if ($competence->defaut == 1) $body .= " checked";
						$body .=
					"</tr>";
		}
		$body .= "<tr>
		<td bgcolor=\"#ffffff\" colspan=\"2\" align=\"right\">
			<input type=\"submit\" value=\"modifier\" />
		</td>
		</tr>
		</table>
		<input type=\"hidden\" value=\"$matiere->id\" name=\"mat\" />
		</form>";

Posté : 05 juin 2007, 01:49
par Xenon_54
On peut avoir un code simple que l'on peut utiliser pour nos tests?

Je ne suis personnellement pas intéressé à le réécrire pour virer tes requêtes SQL.
Et puisque PHP n'a rien à voir avec ton problème, copie simplement le code HTML généré par ton script. Ce sera plus simple pour tout le monde.

Posté : 05 juin 2007, 14:10
par Snoops
Juste une question : pourquoi donner comme identifiant un tableau ???
pour quoi ne pas faire quelque chose du genre :
<?PHP

$i = 0;

while (...)
{
	...
	echo "<INPUT TYPE=\"checkbox\" VALUE=\"\" ID=\"checkbox_".$i."\" />";
	$i++;
	...
}

?>
Puis quelque chose comme :

Code : Tout sélectionner

function cocher_box() { var i = 0; while (document.getElementById('checkbox_' + i)) { document.getElementById('checkbox_' + i).checked = true; i++; } }
Le code est à vérifier mais le raison devrait être de ce genre.

Enfin sauf si tu as une raison particulière pour l'identification de tes CB par tableau !

Posté : 12 juin 2007, 14:17
par d0m
bonjour,

je cherche à peu près la même chose,

j'ai un ensemble de cases à cocher ayant pour nom un tableau :
[/code]name="cases_a_chocher[]"[/code]
qui m'est nécessaire pour un traitement php générique :

Code : Tout sélectionner

foreach(cases_a_cocher as case_a_cocher){ ..... }
l'attribut id est occupé par les identifiants d'une base de donnée assez importante donc non exploitable non plus par getElementById

et je cherche dans une fonction javascript à accéder à toutes les cases à cocher de facon générique.
et là effectivement

Code : Tout sélectionner

document.nom_formulaire.case_a_cocher.checked
ne fonctionne pas

une idée pour contourner le problème en gardant le nom des cases sous forme de tableau?

Posté : 12 juin 2007, 14:24
par Klomac

Code : Tout sélectionner

document.getElementById(...).checked = true;
Peut-être ?

Posté : 12 juin 2007, 14:33
par d0m
document.getElementById(...).checked = true;
Peut-être ?
malheuresuement non car je n'ai pas la liste des identifiants contenus dans l'attribut id et ceux ci ne commencent pas à 0 pour s'arreter au nombre de mes cases à cocher

Posté : 12 juin 2007, 14:40
par [Sébastien]
Tu peux passer par la méthode getElementsByTagName. Puis tu utilises la méthode match pour vérifie que le nom et le même…

Posté : 12 juin 2007, 17:06
par Shrell

Code : Tout sélectionner

function checkall(valeur) { tab=document.getElementsByTagName('input'); for(var i=0; i<tab.length; i++) { if(tab[i].getAttribute('type')=="checkbox") { tab[i].checked=valeur; } } }
ceci récupère toutes les chebox de la page et les coche selon la valeur que tu lui passes, sans se préoccuper de leur nom/id. Tu peux affiner en ne prenant que les checkbox d'un formulaire précis.

Posté : 21 juin 2007, 10:10
par d0m
merci pour les réponses :pouce: