addEventListener使用遇阻:Uncaught ReferenceError错误排查求助
兄弟,这个错误其实是个很容易犯的笔误,一眼就能看出来!
你在绑定点击事件的时候写的是:
elementForOkButton[i].addEventListener("click", okButtonElementFirebase, false);
但你实际定义的处理函数名字是:
function okButtonELementFirebase(){ // ... 函数内容 }
注意看函数名里的第二个单词——你写成了ELement(大写的EL),而绑定事件时用的是Element(小写的le)。JavaScript是严格区分大小写的,所以浏览器找不到你要绑定的函数,直接抛出了Uncaught ReferenceError。
修正方案
只需要把函数名的拼写改统一就行,推荐把函数名修正为正确的okButtonElementFirebase,这样语义也更清晰:
// 修正后的点击处理函数 function okButtonElementFirebase(){ var keyOkButton = this.getAttribute("dataOk-confirmation"); var firebaseRefUsers = refUsers.child(keyOkButton); firebaseRefUsers.remove(); }
额外优化建议:用事件委托代替循环绑定
你的表格内容是动态从Firebase加载的,每次更新都要循环绑定事件其实有点麻烦,而且效率不高。可以试试事件委托——把点击事件绑定到表格的父元素tableBody上,然后通过判断点击的目标元素来处理逻辑,这样不管表格内容怎么更新,都不需要重新绑定事件:
// 把原来循环绑定事件的代码替换成下面这段 tableBody.addEventListener('click', function(e) { // 找到点击的.okButton元素(包括点击按钮内部的span) const okButton = e.target.closest('.okButton'); if (okButton) { const keyOkButton = okButton.getAttribute('dataOk-confirmation'); refUsers.child(keyOkButton).remove(); } });
这样代码更简洁,也避免了动态内容更新后需要重新绑定事件的问题。
内容的提问来源于stack exchange,提问作者juvy
相关产品推荐
相关产品推荐

