javascript 如何将包含类别的复选框的id发送 AJAX ,并显示与该复选框相关的子类别?

aydmsdu9  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(118)

我成功地发送复选框值,这是一个类别的ID时,复选框被选中,并显示在同一页面上的子类别有关选定的子类别,但我有一个问题,当点击多个类别,并再次取消选中的类别之一,所有子类别去联合国显示。我想取消显示的子类别,只有未选中的类别时,我检查和取消检查的价值观随时。这是我的代码,希望你明白我的意思,谢谢

** AJAX **

<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>

J查询

<script>
         
          $(function() {
    //code here
    $('input[type=checkbox]').on('change', function() {
    if($(this).is(':checked')) {
        showUser($(this).val());
    }
    
    
    else{
        
        showUser("");
    }
});
          
         
});
          
      </script>

类别复选框

<?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查询附加代码,但当我选中复选框,它显示了所有选中复选框的子类别,但当取消选中任何框,这将取消显示所有的子类别

3pmvbmvn

3pmvbmvn1#

问题是,当你取消选中任何复选框时,你实际上会清除所有内容:

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("");
    }

为了解决这个问题,你需要以某种方式识别出给出cat_id的元素,例如:可以添加数据属性:

<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>

当您想要取消选中该复选框时,可以使用该数据属性查找要删除的元素:

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);
    }
});

相关问题