提交表单后隐藏表格已勾选行的PHP与JavaScript实现咨询
实现方案
完全可以通过PHP或者JavaScript实现该需求,以下是两种可选方案:
方案1:纯前端JavaScript实现(基于localStorage)
无需修改服务端逻辑,仅靠浏览器本地存储记录需要隐藏的行ID,适合不需要跨设备同步隐藏状态的场景。
修改步骤:
- 在原有脚本中添加提交时存储选中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)
隐藏状态存在服务端,不会因为用户清理浏览器缓存、换设备访问而失效,稳定性更高。
修改步骤:
- 首先修改
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'] )); } // 原有跳转或输出逻辑 ?>
- 修改渲染表格的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
相关产品推荐
相关产品推荐

