求助:Material Design按钮首次需两次点击,重复添加数据及对话框表格清空
嘿,我来帮你搞定这两个Material Design开发里的问题,咱们一个一个来解决:
问题1:按钮点击需两次触发、重复添加数据
原因分析
从你贴的代码来看,核心问题大概率是Firebase的child_added监听被重复绑定了——每次点击按钮调用popup函数时,都会新增一个监听,而旧的监听并没有被移除。这样一来,后续的数据库变更会触发所有绑定的监听,导致数据重复添加到表格里。另外你提到首次点击需要两次触发,可能还存在函数名不匹配的问题(比如按钮onclick写的是purchaseList(orderid),但定义的函数是popup(listid),这会导致第一次点击根本没触发目标函数,第二次可能是其他绑定生效了)。
解决办法
- 修正函数名匹配问题:确保按钮的
onclick调用的是正确的函数名,比如把按钮代码改成:
<button onclick="popup(orderid)" id="dialog">Button</button>
- 避免重复绑定Firebase监听:每次调用
popup时,先移除之前的child_added监听,再重新绑定,这样就不会出现多次触发的情况:
function popup(listid) { var starCountRef = firebase.database().ref('Orders/' + listid).child('foodItems'); // 先移除之前的child_added监听,防止重复触发 starCountRef.off('child_added'); starCountRef.on('child_added', snapshot => { var snaps = snapshot.val(); var itemPrice = snaps.price; var itemName = snaps.name; // 补全你代码里的拼写遗漏 // 这里是添加数据到表格的示例逻辑,替换成你自己的代码 const tableBody = document.getElementById('dialog-table-body'); const row = document.createElement('tr'); row.innerHTML = `<td>${itemName}</td><td>${itemPrice}</td>`; tableBody.appendChild(row); }); }
问题2:对话框关闭时清空表格
解决思路
监听Material Design对话框的关闭事件,在事件触发时清空表格的内容。根据你使用的组件版本,有两种常见的实现方式:
方式1:原生事件监听
如果是使用原生HTML对话框或基础的Material Design对话框,直接监听close事件:
// 获取对话框元素 const dialog = document.getElementById('your-dialog-id'); // 获取表格的tbody(推荐操作tbody,避免误删表头) const tableBody = document.getElementById('dialog-table-body'); // 监听对话框关闭事件 dialog.addEventListener('close', () => { // 清空tbody内的所有行 while (tableBody.firstChild) { tableBody.removeChild(tableBody.firstChild); } // 或者更简洁的写法:tableBody.innerHTML = ''; });
方式2:Material Design Components(MDC)回调
如果你用的是官方MDC JS库初始化对话框,可以监听MDCDialog:closed事件:
// 初始化对话框 const dialog = new mdc.dialog.MDCDialog(document.getElementById('your-dialog-id')); const tableBody = document.getElementById('dialog-table-body'); // 监听对话框关闭回调 dialog.listen('MDCDialog:closed', () => { // 清空表格内容 tableBody.innerHTML = ''; // 额外优化:这里可以移除Firebase监听,避免内存泄漏 // starCountRef.off('child_added'); });
这样就能在对话框关闭时自动清空里面的表格啦~
内容的提问来源于stack exchange,提问作者Ganesh
相关产品推荐
相关产品推荐

