点击表格无响应,求助实现Delete按钮确认弹窗功能
解决表格点击无响应及Delete按钮确认提示框问题
我来帮你一步步搞定这两个问题:
一、修复表格点击无响应的问题
你的代码大概率是因为DOM还没完全加载完成,JS就已经执行了,导致找不到#produits这个表格元素,事件监听自然没绑定成功。有两种简单的修复方式:
方式1:让JS在DOM加载完成后再执行
修改你的main.js,把代码包裹在DOMContentLoaded事件里:
// main.js document.addEventListener('DOMContentLoaded', function() { var produits = document.getElementById('produits'); if (produits) { produits.addEventListener('click', e => { // 后续逻辑写在这里 alert(2); }); } });
方式2:调整script标签的位置
把引入main.js的<script>标签放到HTML的</body>标签之前,这样浏览器会先渲染完所有DOM元素,再加载执行JS代码,自然能找到表格元素。
二、实现Delete按钮的确认提示框
你的Delete按钮是<a>标签,默认会直接跳转页面,所以需要先阻止这个默认行为,弹出确认框,用户确认后再执行删除操作。修改main.js代码如下:
document.addEventListener('DOMContentLoaded', function() { var produits = document.getElementById('produits'); if (produits) { produits.addEventListener('click', e => { // 用closest()查找点击元素的最近匹配按钮,避免按钮内部有子元素时target不匹配的问题 const deleteBtn = e.target.closest('.btn.btn-danger'); if (deleteBtn) { // 阻止a标签的默认跳转行为 e.preventDefault(); // 弹出确认提示框 if (confirm('Are you sure you want to delete this item?')) { // 方案1:用户确认后,执行原跳转逻辑 window.location.href = deleteBtn.getAttribute('href'); // 方案2:推荐用fetch发送无刷新删除请求(需要后端配合处理DELETE方法) // const id = deleteBtn.getAttribute('data-id'); // fetch(`/Supprimer/${id}`, { // method: 'DELETE' // }) // .then(res => { // if (res.ok) { // // 删除成功后直接移除当前行,无需刷新页面 // deleteBtn.closest('tr').remove(); // } // }) // .catch(err => console.error('Delete failed:', err)); } } }); } });
小提示:为什么用closest()?
如果你的Delete按钮里加了图标(比如<i class="fa fa-trash"></i>),点击图标时e.target会是<i>标签而不是按钮本身,用closest('.btn.btn-danger')可以向上找到最近的按钮元素,逻辑更可靠。
额外的小优化建议
你的Twig模板里,Show按钮用了重复的id="button",页面中的id必须是唯一的,建议去掉这个id,或者改成动态唯一的(比如id="show-btn-{{ produit.idProduit }}")。
内容的提问来源于stack exchange,提问作者Omar Krichen
相关产品推荐
相关产品推荐

