Почему обработчик кликов для удаления строки таблицы выдает ошибку как «неопределенная»? - PullRequest
0 голосов
/ 04 декабря 2018

Я хочу удалить строку из таблицы, когда я нажимаю на кнопку

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);
}

также этот код в функции отправки формы

См. Изображение здесь

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Есть несколько проблем.

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
0 голосов
/ 04 декабря 2018

попробуйте заменить

  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 тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...