You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

提交表单后隐藏表格已勾选行的PHP与JavaScript实现咨询

实现方案

完全可以通过PHP或者JavaScript实现该需求,以下是两种可选方案:


方案1:纯前端JavaScript实现(基于localStorage)

无需修改服务端逻辑,仅靠浏览器本地存储记录需要隐藏的行ID,适合不需要跨设备同步隐藏状态的场景。

修改步骤:

  1. 在原有脚本中添加提交时存储选中ID、页面加载时隐藏对应行的逻辑,修改后的完整脚本如下:
document.forms[0].addEventListener("submit", function(event){
    if (send == 0 ) { 
        event.preventDefault(); 
        return;
    }
    // 提交时收集选中的行ID存入localStorage
    const checkedIds = Array.from(document.querySelectorAll('input[name="chk[]"]:checked')).map(el => el.value)
    const existedHidden = JSON.parse(localStorage.getItem('hidden_invoice_ids') || '[]')
    // 去重后更新存储
    const updatedHidden = [...new Set([...existedHidden, ...checkedIds])]
    localStorage.setItem('hidden_invoice_ids', JSON.stringify(updatedHidden))
});

// 页面加载完成后隐藏已提交过的行
document.addEventListener('DOMContentLoaded', () => {
    const hiddenIds = JSON.parse(localStorage.getItem('hidden_invoice_ids') || '[]')
    document.querySelectorAll('input[name="chk[]"]').forEach(checkbox => {
        if (hiddenIds.includes(checkbox.value)) {
            checkbox.closest('tr').style.display = 'none'
        }
    })
})

function myFunction(el) {
  var hidden = el.previousElementSibling;
  hidden.style.display = 'block';
  hidden.select();
  hidden.setSelectionRange(0, 99999)
  document.execCommand("copy");
  alert("Copied the text: " + hidden.value);
  hidden.style.display = 'none';
}
  
var send = 0;

function sendit(){
    send = 1;
    console.log(send);
}
  
function checkform(){
    if (send == 1){
        console.log(send);
        // 修复原代码拼写错误:form -> forms
        document.forms[0].submit();
    } else {
        return false;
    }
}

如果需要重置隐藏状态,添加一行按钮调用localStorage.removeItem('hidden_invoice_ids')后刷新页面即可。


方案2:PHP实现(基于Session)

隐藏状态存在服务端,不会因为用户清理浏览器缓存、换设备访问而失效,稳定性更高。

修改步骤:

  1. 首先修改companies.php,在生成XML的逻辑中添加存储选中ID到Session的代码:
<?php
session_start();
// 原有生成XML的逻辑
if (isset($_POST['submit']) && !empty($_POST['chk'])) {
    // 初始化存储隐藏ID的session字段
    if (!isset($_SESSION['hidden_invoice_ids'])) {
        $_SESSION['hidden_invoice_ids'] = [];
    }
    // 合并新提交的ID并去重
    $_SESSION['hidden_invoice_ids'] = array_unique(array_merge(
        $_SESSION['hidden_invoice_ids'],
        $_POST['chk']
    ));
}
// 原有跳转或输出逻辑
?>
  1. 修改渲染表格的PHP页面,循环输出行之前判断是否需要隐藏:
<?php
session_start();
$hiddenIds = $_SESSION['hidden_invoice_ids'] ?? [];
// 原有查询数据的逻辑
foreach ($yourDataList as $ff) { // 替换为你原来的循环变量名
    // 不在隐藏列表才输出行
    if (!in_array($ff['ID'], $hiddenIds)) {
?>
<tr>
    <!-- 你原有<tr>标签内的全部代码 -->
    <td class="ttd"><input type="checkbox" value="<?php echo $ff['ID']; ?>" name="chk[]"> </td>
    <td class="ttd"><?php echo htmlentities($ff['ID']); ?> </td>
    <!-- 剩余列代码保持不变 -->
</tr>
<?php
    }
}
?>

如果需要重置隐藏状态,添加逻辑执行unset($_SESSION['hidden_invoice_ids'])即可。


内容的提问来源于stack exchange,提问作者Saeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:54:06