Maison > Questions et réponses > le corps du texte
J'ai réussi à envoyer la valeur de la case à cocher qui est l'identifiant de la catégorie lorsque la case est cochée et à afficher les sous-catégories liées à la sous-catégorie sélectionnée sur la même page, mais lorsque je clique sur plusieurs catégories et que je décoche à nouveau toutes les cases, j'ai du mal à afficher une sous-catégorie lorsqu'elle se trouve dans une des catégories. Comme je coche et décoche les valeurs à tout moment, je souhaite supprimer l'affichage uniquement des sous-catégories de la catégorie non cochée. Ceci est mon code, j'espère que vous comprenez ce que je veux dire, merci
**visage**
<script> function showUser(str) { if (str == "") { document.getElementById("txtHint").innerHTML = ""; return; } else { var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("txtHint").innerHTML += this.responseText; } }; xmlhttp.open("POST","getsubcat.php?q="+str,true); xmlhttp.send(); } } </script>
JQuery
<script> $(function() { //code here $('input[type=checkbox]').on('change', function() { if($(this).is(':checked')) { showUser($(this).val()); } else{ showUser(""); } }); }); </script>
Case à cocher de catégorie
<?php foreach($cat as $row) { ?> <input class = "messageCheckbox" type = "checkbox" id = "check" value = "<?php echo $row["id"]; ?>"> <label for = "check"><?php echo $row["name"]; ?></label> <?php } ?> <br> <div id="txtHint"><b></b></div>
getsubcat.php
<?php $q = intval($_GET['q']); $result = $link->query("SELECT * FROM subcat WHERE cat_id = '".$q."'"); ?> <div class = "checkbox"> <?php while($row = mysqli_fetch_array($result)) { ?> <input type="checkbox" id="sub_cat" name="sub_cat" value="<?php echo $row['subcat']; ?>"> <label for="sub_cat"> <?php echo $row['subcat']; ?></label><br> <?php } ?>
J'essaie de résoudre le problème en utilisant le code de requête j ci-joint, mais lorsque je coche la case, toutes les sous-catégories sont affichées avec la case cochée, mais lorsqu'une case est décochée, toutes les sous-catégories sont affichées. Catégorie
P粉9389363042023-09-13 19:20:47
Le problème est que lorsque vous décochez une case, vous effacez tout :
function showUser(str) { if (str == "") { document.getElementById("txtHint").innerHTML = ""; return; } ... } $('input[type=checkbox]').on('change', function() { if($(this).is(':checked')) { showUser($(this).val()); } else{ showUser(""); }
Pour résoudre ce problème, vous devez identifier l'élément donné cat_id d'une manière ou d'une autre, par exemple vous pouvez ajouter l'attribut data :
<input type="checkbox" id="sub_cat" name="sub_cat" value="<?php echo $row['subcat']; ?>" data-cat="<?php echo $q ?>"> <label for="sub_cat" data-cat="<?php echo $q ?>"> <?php echo $row['subcat']; ?></label><br>
Lorsque vous souhaitez décocher la case, vous pouvez utiliser cet attribut de données pour trouver l'élément que vous souhaitez supprimer :
function hideUser(str) { $('[data-cat="' + str + '"]').remove(); } $('input[type=checkbox]').on('change', function() { const user = $(this).val(); if($(this).is(':checked')) { showUser(user); } else{ hideUser(user); } });