【问题标题】:Reverse or hide jQuery ajax for input checkbox results反转或隐藏输入复选框结果的 jQuery ajax
【发布时间】:2021-03-10 23:56:51
【问题描述】:

我对 jquery 没有很好的了解,所以我的代码运行良好,但他们的问题是在取消选中复选框时隐藏结果。(选中以从数据库中获取结果 - 取消选中隐藏这些结果)

catfd.php 代码

 <input type="checkbox" value="2" class="catcf"> catfd2 <br />
 <input type="checkbox" value="35" class="catcf"> catfd35 <br />
 <input type="checkbox" value="22" class="catcf"> catfd22 <br />
 <input type="checkbox" value="133" class="catcf"> catfd133 <br />
 <input type="checkbox" value="28" class="catcf"> catfd28 <br />
 <input type="checkbox" value="33" class="catcf"> catfd33 <br />
 <input type="checkbox" value="55" class="catcf"> catfd55 <br />
 <input type="checkbox" value="44" class="catcf"> catfd44 <br />
 <div class="main-area-courses-continer">
<!-- here will echo the results -->

</div>

jquery ajax 代码从 PHP 页面 'getvalue.php' 获取结果


if(isset($_POST['catcf'])){
?>
<div class="main-area-courses-continer" >
<?php
    $catcfid= $_POST['catcf'];
    $sql = 'SELECT * FROM tablename  where cat_id = '.$catcfid.' order by p_id asc';
    $catandproid = $wpdb->get_results($sql);
    foreach($catandproid as $key){
/////////////////////////////////Updates
?>
<div class="<?php echo $catcfid; ?>" >
<?php
        echo $key->title;
?>
</div><!-- End of Continer catcfid -->
<?php
////////////////////////////////////////////
    }
}
?>
</div>

是ajax jquery代码

$(document).ready(function() {
  $(".catcf").on('click', function() {
    if ($('input.catcf').is(':checked')) {
      var catcf = Number($(this).val());
      $.ajax({
        url: 'getvalue.php',
        type: 'post',
        data: {
          catcf: catcf
        },
        beforeSend: function() {
          $(".main-area-courses-continer").html("Looding....");
        },
        success: function(response) {
          // Setting little delay while displaying new content
          setTimeout(function() {
            // appending posts after last post with class="post"
            $(".main-area-courses-continer:last").after(response).show().fadeIn("slow");
            $(".main-area-courses-continer").html("");
          }, 2000);
        }
      });
    }
  });
});

【问题讨论】:

  • 嗨,你可以显示main-area-courses-continer div 吗?此外,对于所有选中的帖子,内容都加载到此 div 中,您只需要从该 div 中删除或隐藏特定内容吗?
  • 警告!您对SQL injection 攻击敞开大门!您应该使用参数化的prepared statements,而不是直接在查询中使用完全未转义的用户数据。 永远永远永远相信用户输入。
  • Swati , main-area-courses-continer 就像数据库内部的 coniner echo 结果,我只需要为每个隐藏特定复选框的结果
  • 我明白了,您如何区分它们的任何 id 或值?
  • 我得到了结果输出(
    title name
    second name
    ),现在我不会隐藏所有类2 通过取消选中特定的复选框并且值为 2 .. 我在 else if ($('input.catcf').is(":not(:checked)")){ $( "."+Number( $(this).val())).remove(); } 工作,但工作不好后选择了 multitply 选择不好,因为没有更新 $( "."+Number($(this).val()))

标签: php html jquery ajax


【解决方案1】:

您可以检查带有class="catcfid" 的 div 是否存在于您的 DOM 中,或者不使用 $(".main-area-courses-continer &gt; ." + catcf).length == 0 如果长度为 0 意味着没有这样的 div 那么您可以发出 ajax 请求以从后端获取它,否则只显示该 div 使用 $("." + catcf).parent().show(); else if unchecked 隐藏该 div 使用 $("." + catcf).parent().show();

演示代码

$(document).ready(function() {
  $(".catcf").on('click', function() {
    var catcf = Number($(this).val());
    if ($(this).is(':checked')) {
      //check if the div with class catcf is not there 
      if ($(".main-area-courses-continer >  ." + catcf).length == 0) {
        /*.ajax({
           url: 'getvalue.php',
           type: 'post',
           data: {
             catcf: catcf
           },
           beforeSend: function() {
             $(".main-area").html("Looding....");
           },
           success: function(response) {*/
        setTimeout(function() {
          //$(".main_container:last").after(response).show().fadeIn("slow");
          //dummy data append ..
          $(".main_container:last").after('<div class="main-area-ourses-continer"><div class="' + catcf + '">catfd' + catcf + ' data....</div> </div>')
          $(".main-area").html("")//empty loading ..
        }, 100);
        /*
        });*/

      } else {
        //show that class 
        $("." + catcf).parent().show();
      }
    } else {
      //hide that class means unchecked
      $("." + catcf).parent().hide()
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" value="2" class="catcf" checked> catfd2 <br />
<input type="checkbox" value="35" class="catcf"> catfd35 <br />
<input type="checkbox" value="22" class="catcf" checked> catfd22 <br />
<input type="checkbox" value="133" class="catcf"> catfd133 <br />
<input type="checkbox" value="28" class="catcf"> catfd28 <br />
<input type="checkbox" value="33" class="catcf"> catfd33 <br />
<input type="checkbox" value="55" class="catcf" checked> catfd55 <br />
<input type="checkbox" value="44" class="catcf"> catfd44 <br /> Datas :
<!--put this div for loading separtely-->
<div class="main-area"></div>

<div class="main_container">
  <div class="main-area-courses-continer">
    <div class="2">
      catfd2 data....
    </div>
  </div>
  <div class="main-area-courses-continer">
    <div class="22">
      catfd22 data....
    </div>
  </div>
  <div class="main-area-courses-continer">
    <div class="55">
      catfd55 data....
    </div>
  </div>
</div>

【讨论】:

  • 问题可能是如果我选中该框之一..然后我想选择第二个..它可以引用.main_containe区域并将这两个或它们的复选框一起提交到php页面并从 sql 查询中获取结果?如何通过 jquery ajax 发送多重复选框
  • 嗨,这个post 将有助于实现同样的目标。
【解决方案2】:

只需更改 QUERY,我认为这就是问题所在

$sql = 'SELECT * FROM tablename  Where cat_id = '.$catcfid.' And status = '1' order by p_id ASC';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2013-03-21
    相关资源
    最近更新 更多