Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

Re: Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

par lucieemtl » 18 janv. 2016, 16:45

J'ai modifié tout mon code et j'aimerais savoir comment récupérer dossiers ?

Code : Tout sélectionner

<style> <?php include 'css/style.css'; include 'css/jqueryFileTree.css'; ?> </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script> <script> $(document).ready(function() { $("#checkall").click(function() { $("input:checkbox").each(function(){ var checked = $("#checkall").attr("checked"); if(checked == "checked") { $(this).attr('checked', true); } else { $(this).attr('checked', false); } }); }); }); function getElementsById(regex) { var tags = document.getElementsByTagName('*'), tagsLength = tags.length, matches = [], index, tag; for (index = 0; index < tagsLength; index += 1) { tag = tags[index]; if (regex.test(tag.id)) { matches.push(tag); } } return matches; } function selectionner(z){ var dossiers = getElementsById('/^'+z+'-'); alert(dossiers); var nbre = dossiers.length; for (var i = 0; i < nbre; i++) { //dossiers[i].checked=1; alert(dossiers[i]); } } </script> <div id="explorateur"> <header id="header"> <input type="checkbox" name="toutCocher" id="checkall"/> <input type="button" name="valider" id="boutonValider" value="Mettre à jour"/> </header> <div id="container_id"> <?php getDirectory('../', 0, ''); echo '<form name="form" methode="POST"><ul>'; function getDirectory( $path = '../', $level , $levelprec) { $numdossier = 1; // Répertoires à ignorer $ignore = array( '.', '..' ); // Répertoire à ouvrir $dh = @opendir( $path ); // Boucler dans le répertoire : while( false !== ( $file = readdir( $dh ) ) ) { //Si ce fichier ne doit pas être ignoré alors... if( !in_array( $file, $ignore ) ) { // On effectue un espace pour une meilleure vue... $spaces = str_repeat('&nbsp;', ($level * 5)); // Et on ne montre que les sous-répertoires ! if(is_dir("$path/$file")) { //On place dans une variable les droits de chaque répertoires que l'on appelera à chaque fois $perms = substr(sprintf('%o', fileperms($path)), -3); // On appelle à nouveau cette fonction dans les nouveaux répertoires de façon à ce que ce soit récursif. $idcourant = "$levelprec".(strlen($levelprec)?'-' : '')."$numdossier"; echo"<li id=\"arborescence\">$spaces\r\n"."<input type=\"checkbox\" name=\"checkboxDossierPath\" id=\"$idcourant\" onclick =\" selectionner('$idcourant');\" value=\"$path\"/>\r\n"."<a href=$path/$file><img src=\"/wordpress2/wp-content/plugins/DWPSecurity/icons/directory.png\" height=\"20\"/> $file</a>\r\n<div id=\"droit\">($perms)</div></li>"; getDirectory("$path/$file", ($level+1), "$levelprec".(strlen($levelprec)?'-' : '')."$numdossier"); $numdossier++; } } } // Close the directory handle closedir( $dh ); } echo '</ul></form>'; ?> </div>
S'il vous plaît... :(

Re: Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

par lucieemtl » 18 janv. 2016, 15:59

D'accord, mais comment intégrer ça à ma fonction JS....

Re: Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

par Spols » 18 janv. 2016, 15:56

imagine une hierarchie simple de dossier

Code : Tout sélectionner

dossier dossier 1 dossier 1.1 dossier 1.2 dossier 1.2.1 dossier 1.2.2 dossier 1.2.3 dossier 1.3 dossier 2
si leur id est égal à leur nom, si je clique sur dossier 1.2 tout les dossier qui commence par "dossier 1.2" devront être coché.

Si tu utilise le chemin complet, tu aura le même effet

Re: Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

par lucieemtl » 18 janv. 2016, 12:51

Je donnerai un id à chaque checkbox lui signifiant sa hiérarchie.

Ensuite ors du parcours de toutes les checkboxs, si le début de son id est egal à l'id de la checkbox cochée, je la coche aussi
Spols j'essaie de comprendre en vain ce que tu veux dire mais je ne vois pas.. Pourrais-tu être plus clair lorsque tu dis : "si le début de son id est egal à l'id de la checkbox cochée, je la coche aussi" s'il te plaît ?

Re: Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

par lucieemtl » 18 janv. 2016, 12:44

Bien entendu, ça ne fonctionne pas...

Re: Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

par lucieemtl » 18 janv. 2016, 12:43

D'accord voici ce que j'ai fais pour le moment :

[...]

Code : Tout sélectionner

$maVar = "$path/$file"; echo"<li id=\"arborescence\">$spaces<input type=\"checkbox\" name=\"checkboxDossierPath\" id=\"$maVar\" value=\"$path\"/><a href=$path/$file><img src=\"/wordpress2/wp-content/plugins/DWPSecurity/icons/directory.png\" height=\"20\"/> $file</a><p>($perms)</p></li>"; getDirectory("$path/$file", ($level+1));
[...]

Et mon JS :

Code : Tout sélectionner

$(document).ready(function() { $("#$maVar").click(function() { $("input:checkbox").each(function(){ var checked = $("#checkall").attr("checked"); if(checked == "checked") { $(this).attr('checked', true); } else { $(this).attr('checked', false); } }); }); });

Re: Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

par Spols » 18 janv. 2016, 12:32

Tu as tous loisir de mettre l'id que tu veux, tu as fait toi même la fonction récursive. De plus il ne faut jamais avoir un id identique pour deux balises distinctes. Or c'est le cas pour tes balises li et maintenant pour ton input.

Si tu met id=\"$path/$file\" tu aura un id spécifique pour chaque checkbox et tu pourras faire ce que je te suggère.

Re: Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

par lucieemtl » 18 janv. 2016, 12:02

Et bien en fait les checkboxs sont appelées de façons récursives dans une fonction, donc je ne peux pas vraiment spécifier leur ID..

Voici le morceau de code concernant l'input :
[...]

Code : Tout sélectionner

if(is_dir("$path/$file")) { //On place dans une variable les droits de chaque répertoires que l'on appelera à chaque fois $perms = substr(sprintf('%o', fileperms($path)), -3); // On appelle à nouveau cette fonction dans les nouveaux répertoires de façon à ce que ce soit récursif. echo"<li id=\"arborescence\">$spaces<input type=\"checkbox\" name=\"checkboxDossierPath\" id=\"checkboxDossier\" value=\"$path\"/><a href=$path/$file><img src=\"/wordpress2/wp-content/plugins/DWPSecurity/icons/directory.png\" height=\"20\"/> $file</a><p>($perms)</p></li>"; echo $_POST['checkboxDossierPath']; getDirectory("$path/$file", ($level+1)); }
[...]

Re: Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

par Spols » 18 janv. 2016, 11:58

Je donnerai un id à chaque checkbox lui signifiant sa hiérarchie.

Ensuite ors du parcours de toutes les checkboxs, si le début de son id est egal à l'id de la checkbox cochée, je la coche aussi

Re: Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

par lucieemtl » 18 janv. 2016, 11:51

J'ai modifié un peu, mais en procédant ainsi, toutes les checkboxs existantes sont cochée, hors moi j'aimerai que lorsque je coche un dossier, seuls les sous-dossiers, sous-sous-dossiers soient cochés, et non pas le reste de tous les dossiers. Aidez-moi s'il vous plaît !

Code : Tout sélectionner

$(document).ready(function() { $("#checkboxDossier").click(function() { $("input:checkbox").each(function(){ var checked = $("#checkboxDossier").attr("checked"); if(checked == "checked") { $(this).attr('checked', true); } else { $(this).attr('checked', false); } }); }); });

Re: Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

par @rthur » 18 janv. 2016, 11:33

Modération :
Afin d'obtenir plus de réponses, le sujet a été déplacé dans un forum plus approprié (PHP débutant > Javascript).

Si la checkbox d'un dossier est cochée, alors cocher toutes celles des sous dossiers.

par lucieemtl » 18 janv. 2016, 11:02

Bonjour à toutes et à toutes,

En fait tout est dit dans l'objet de ce sujet : mon problème est, que lorsque je coche une case correspondant à un dossier, j'aimerai que celles des sous-dossiers soient cochées automatiquement. Toutefois, si un sous-dossier seulement est coché, alors les autres ne sont pas cochés.

J'avais déjà mis en place un petit système pour que, lorsqu'une checkbox principale est cochée alors toutes les autres le sont, mais je n'arrive pas à l'appliquer dans ma boucle.

Voici mon code, quelqu'un aurait-il une idée ?

Code : Tout sélectionner

<style> <?php include 'css/style.css'; include 'css/jqueryFileTree.css'; ?> </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script> <script> <?php include 'js/checkall.js'; ?> </script> <div id="explorateur"> <header id="header"> <input type="checkbox" name="toutCocher" id="checkall"/> <input type="button" name="valider" id="boutonValider" value="Mettre à jour"/> </header> <div id="container_id"> <?php getDirectory('../'); echo '<table id="tableExplorer">'; function getDirectory( $path = '../', $level = 0 ) { // Répertoires à ignorer $ignore = array( '.', '..' ); // Répertoire à ouvrir $dh = @opendir( $path ); // Boucler dans le répertoire : while( false !== ( $file = readdir( $dh ) ) ) { //Si ce fichier ne doit pas être ignoré alors... if( !in_array( $file, $ignore ) ) { // On effectue un espace pour une meilleure vue... $spaces = str_repeat('&nbsp;', ($level * 5 )); // Et on ne montre que les sous-répertoires ! if(is_dir( "$path/$file" ) ) { //On place dans une variable les droits de chaque répertoires que l'on appelera à chaque fois $perms = substr(sprintf('%o', fileperms($path)), -3); // On appelle à nouveau cette fonction dans les nouveaux répertoires de façon à ce que ce soit récursif. echo"<tr><td><ul><li id=\"arborescence\">$spaces<input type=\"checkbox\" name=\"checkbox\"/><a href=$path/$file><img src=\"/wordpress2/wp-content/plugins/DWPSecurity/icons/directory.png\" height=\"20\"/> $file</a><p>($perms)</p></li>"; getDirectory("$path/$file", ($level+1)); } } echo"</ul></td>"; } // Close the directory handle closedir( $dh ); echo "</tr>"; } echo '</table>'; ?> </div>
Voici mon code Javascript (on sait jamais) :

Code : Tout sélectionner

$(document).ready(function() { $("#checkall").click(function() { $("input:checkbox").each(function(){ var checked = $("#checkall").attr("checked"); if(checked == "checked") { $(this).attr('checked', true); } else { $(this).attr('checked', false); } }); }); });