错误:无法读取未定义的属性“cloneNode”

时间:2017-02-07 16:43:57

标签: javascript firebase ecmascript-6 firebase-realtime-database

我正在尝试使用Firebase向我的数据库添加一个监听器。

const dbRef=firebase.database().ref().child('messages');
dbRef.on('child_added', MS.bringData);

添加内容后,我执行bringData,从message对象创建一个名为snap的新对象。

export const bringData = (snap) => {
  const message1=new Message(snap.val().objet, snap.val().message, snap.val().etat, snap.val().key);
  message1.creerLigne();
}

然后我从课程creerLigne()拨打Message,创建新行并将其添加到tbody

creerLigne() {
     const arg=[this._objet, this._message, this._etat, this._id];
     const row=document.createElement("tr");
     row.setAttribute('id', this._id);
     const data=document.createElement("td");
     var checkB=document.createElement("input").setAttribute('type', 'checkbox', 'name', 'delete');

     var i=0;
     while(i<arg.length-1) {
         let data1=data.cloneNode();
         let text=document.createTextNode(arg[i]);
         data1.appendChild(text);
         row.appendChild(data1);
         i++;
     }

     data1.appendChild(text);
     row.appendChild(data1);
     row.appendChild(checkB.cloneNode());
     document.body.appendChild('row');
}

但不幸的是我收到了以下错误:

FIREBASE WARNING: Exception was thrown by user callback. TypeError: Cannot read property 'cloneNode' of undefined
    at Message.creerLigne 

2 个答案:

答案 0 :(得分:0)

var checkB=document.createElement("input").setAttribute('type', 'checkbox', 'name', 'delete');

应该是

var checkB=document.createElement("input");
checkB.setAttribute('type', 'checkbox');
checkB.setAttribute('name', 'delete');

.setAttribute不返回元素,只需要两个参数。

答案 1 :(得分:0)

 creerLigne(){
                 const arg=[this._objet,this._message,this._etat,this._id];
                 const row=document.createElement("tr");
                 row.setAttribute('id',this._id);
                 const  data=document.createElement("td");
                 const checkB = document.createElement("input");
                 checkB.setAttribute('type','checkBox');
                 checkB.setAttribute('name','delete');
                 let i=0;
                    while(i<arg.length-1)
                    {
                     const data1=data.cloneNode();
                     var text=document.createTextNode(arg[i]);
                     data1.appendChild(text);
                     row.appendChild(data1);
                   i++;
                 }
               row.appendChild(checkB.cloneNode());
               const table= document.querySelector('table');
               table.appendChild(row);
             }