【问题标题】:Hiding table row based on incremental php variable attached to the row基于附加到行的增量php变量隐藏表行
【发布时间】:2020-05-14 18:15:19
【问题描述】:

当通过 Mysql 动态填充表时,如何基于与 <tr>(增量变量 $i)关联的 php 变量隐藏特定的 <tr>。我环顾四周,但没有得到任何线索。

       <table id="example">
          <thead>
             <tr>
             <th>S.No.</th>
             <th>Item Number</th>
              <th>Question</th>
              <th>Option-A</th>
              <th>Option-B</th>
              <th>Option-C</th>
              <th>Option-D</th>
              <th style="text-align: center;">Correct Ans.</th>
              <th style="text-align: center;">Marks</th>
              <th style="text-align: center;">Action</th>
              </tr>
           </thead>
           <tbody>
        <?php

        if ($query != '')  {
        $res        =   mysql_query($query) ;

            $i = 1;

        while($row  =   mysql_fetch_array($res))

        {
        extract($row);

        ?>               
            <tr class="record">
            <td><?php echo $i ; ?></td>
            <td><?php echo $item_no ; ?></td>
            <td><?php echo $level_id ; ?></td>
            <td><textarea disabled name="question" rows="4" cols="35"><?php echo $question ; ?></textarea></td>
            <td><?php echo $option_A ; ?></td>
            <td><?php echo $option_B ; ?></td>
            <td><?php echo $option_C ; ?></td>
            <td><?php echo $option_D ; ?></td>
            <td><?php echo $correct_ans ; ?></td>
            <td><?php echo $marks ; ?></td>
            <td> <a href="#" class="btnIcon glyphicon glyphicon-trash delbutton" data-toggle="tooltip" title="Delete" id="<?php echo $id; ?>"></a></td>
     <script type="text/javascript" >
            $(function() {

                $(".delbutton").click(function() {
                    var del_id = $(this).attr("id");
                    var info = 'id=' + del_id;
                    var $tr = $(this).closest('tr');

                    if (confirm("Sure you want to delete this post? This cannot be undone later.")) {

                        $.ajax({
                            type : "POST",
                            url : "delete_entry.php", //URL to the delete php script
                            data: info,
                        success : function(response) {
                                   if(response=='deletion success'){
                                    $tr.find('td').fadeOut(1000,function(){ $tr.remove();  }); 

                                   }
                            }
                        });  
                    }
                    return false;
                });
                });
 </script>
             </tr>
        <?php $i++; } }    
            </tbody>
            </table>

还有我的 ajax 页面,

 <?php
header('Content-Type: application/json');  

session_start();

require("../config.php"); 
require("../Database.class.php"); 
require("../site.php"); 
$db = new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);     
$fnc=new site_functions($db);

    $id     =   $_POST['id'];

    $deleted_date = date("Y-m-d h:i:s");
  $deleted_by       =    $_SESSION['session_admin_id'] ;

  $nots = $db->idToField("tbl_ques","notes",$id);
   if ($nots == "")
   {
   $date_string = "last deleted on|".$deleted_date."|" ;
   }
   else {
   $date_string = $nots."last deleted on|".$deleted_date."|" ;
   }
     $fnc->update_is_not_deleted_for_Pearsonvue("tbl_ques",$id, "$deleted_date", $deleted_by);       
    $notes_data = array("notes"=>$date_string);

  if($db->query_update("tbl_ques", $notes_data, "id=$id")){
      http_response_code();        
      echo json_encode('deletion success');
    }else{
       http_response_code(204);       
    }

?>

【问题讨论】:

  • 为什么需要jquery,可以使用php-like ' } ?php>}
  • 因为我在删除任何行时收到来自 AJAX 的响应。 @AkhilAravind
  • 如果行上有一些可识别的标识符,那么您可以使用 $(row selector).css(display, 'none')。你从 ajax 响应中得到了什么?
  • @anand,给tr 一个ID,让它像table-row-$i,其中$i 是增量值,删除时,将$i 值传递给阿贾克斯方法。当您从后端获得success 响应时,请使用您在ajax 方法调用中获得的ID,并使用id 删除tr - 就像$('#'+id_to_remove).remove()。这将在 ajax 成功时删除 tr。希望你明白我的意思。如果您有任何问题,请告诉我。
  • 我正在 Ajax 页面上执行一些 mysql 查询以删除行并接收成功消息。现在我该怎么办? @VanquiishedWombat

标签: php jquery html-table


【解决方案1】:

您已经很接近了 - 事实上,您的代码至少应该在第一次点击时工作。总之,

换行

$tr.find('td').fadeOut(1000,function(){ $tr.remove();  });

$('#' + del_id).closest('tr').remove(); }); 

它的作用是在 DOM 中找到删除按钮元素,然后在 DOM 结构中查找第一个 TR 元素,并将其从 DOM 中删除。

通常最好在异步回调中依赖简单变量,因为依赖对象,例如 $this 或在您的情况下为 $tr 可能会导致 $tr 变量指向的对象不是您预期的对象的问题。

编辑:添加了下面的工作 sn-p 来说明该技术。如果您仍有问题,请从您的代码中创建一个minimal verifiable version 作为 sn-p,以便我们查明问题。

$('.del').on('click', function() {

  $(this).closest('tr').remove();

})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="example">
  <thead>
    <tr>
      <th>First name</th>
      <th>Second name</th>
      <th>Age</th>
      <th style="text-align: center;">Action</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Joe</td>
      <td>Bloggs</td>
      <td>22</td>
      <td style="text-align: center;">
        <button id='A1' class='del'>Delete</button>
      </td>
    </tr>

    <tr>
      <td>Jane</td>
      <td>Bloggs</td>
      <td>19</td>
      <td style="text-align: center;">
        <button id='A2' class='del'>Delete</button>
      </td>
    </tr>

    <tr>
      <td>Joanne</td>
      <td>Bloggs</td>
      <td>28</td>
      <td style="text-align: center;">
        <button id='A3' class='del'>Delete</button>
      </td>
    </tr>

  </tbody>
</table>

【讨论】:

  • 谢谢你,但不幸的是它没有显示任何效果。问题仍然相同。此外,使用这行代码会使我的表无响应,并且删除了应用于表的 nowrap 类。可以做点别的吗
  • 谢谢你。但实际上我想实现与您在上面显示的相同的东西,但是有 MySQL 查询,我无法在最小版本中演示的 php 操作。我希望像上面显示的那样发生同样的事情,但不幸的是,您使用的代码没有做任何事情。
  • 在成功函数中添加了$('#table_id_'+del_id).remove();,在&lt;tr&gt;中添加了var $tr = $(this).closest('tr');作为变量和&lt;tr class="record" id="table_id_&lt;?php echo $i; ?&gt;"&gt;
  • 这一切都应该有效 - 显然还有其他一些错误。仔细检查您的代码和成功函数中的 console.log($('#table_id_'+del_id).length) - 如果值为零,则选择器失败。
  • 是的,它以0 的形式出现。我已经实现了与上面相同的代码。我们现在还能检查什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 2018-11-21
  • 1970-01-01
相关资源
最近更新 更多