为什么单击处理程序删除表行会引发“未定义”错误?

时间:2018-12-04 04:24:37

标签: javascript html function

我想在单击按钮时从表中删除一行

function submitform(){
  var bdelete = document.createElement("BUTTON");
  bdelete.setAttribute("id", "del");
  bdelete.onclick = delid(this);
  var bdname = document.createTextNode("Delete");
  bdelete.appendChild(bdname);
  td6.appendChild(bdelete);
}

且函数为undefined

function delid(rows) {
  var del = rows.srcElement.parentNode.parentNode;
  document.getElementById("info").deleteRow(del.rowIndex);
}

此代码也在提交表单功能中

See Image here

2 个答案:

答案 0 :(得分:0)

尝试替换

  bdelete.onclick = function(){delid(this)};

  bdelete.onclick = delid(this);

还将自定义函数放在调用它的代码上方。

function delid(rows) {

        var del = rows.srcElement.parentNode.parentNode;
        document.getElementById("info").deleteRow(del.rowIndex);
    }
  var bdelete = document.createElement("BUTTON");
    bdelete.setAttribute("id", "del");
      bdelete.onclick = delid(this);
    var bdname = document.createTextNode("Delete");
    bdelete.appendChild(bdname);
    td6.appendChild(bdelete);

如果这不能解决问题。请也发布您的html。

答案 1 :(得分:0)

有一些问题。

function submitform() {
  //...
  bdelete.onclick = delid(this);
  //...
}

第一个问题是this的值。按照书面规定,this将是功能对象submitform。如果要传递事件对象,则submitform首先需要接收事件参数,以便可以传递它。

submit.onclick = submitform;
function submitform (event) {
  //...
}

第二个问题是click事件如何绑定到删除按钮。如果delid()返回了一个函数,这可能是有效的,但是更有可能应该简单地分配该函数,绑定一个新函数或包装一个新函数。

bdelete.onclick = delid;                          // assignment
bdelete.onclick = delid.bind(null, event);        // function binding
bdelete.onclick = function () { delid(event); };  // new anonymous function