зона.js: 140 Uncaught TypeError: не удается прочитать свойство "удалить"

  • Я новичок в Kendo ui.
  • Я разработал прототип в моей скрипкой. окно подтверждения удаления работает нормально.
  • но когда я интегрируюсь в свою кодовую базу, я получаю ошибку, не могу прочитать свойство "удалить" в строке pai_to_delete.удалить();
  • Ребята, подскажите, как это исправить.
  • предоставление моего кода ниже.

обновлено

-может быть, я не правильно объяснить...как мой ui выглядит, когда я нажимаю ссылку, открывается большое всплывающее окно с сеткой...в этой сетке, когда я нажимаю столбец откроется небольшое всплывающее окно с опцией delete...когда я нажимаю кнопку Удалить, открывается окно подтверждения... - когда я использую родной метод подтверждения js, он работает нормально..Я думаю, что на этот раз все правильно... - но когда я использую всплывающее окно Kendo ui, оно не работает нормально... - мой pai_to_delete не ссылается должным образом, когда я использую Kendo ui...поскольку это относится к этому div, а не к родительскому div, я думаю так.

прототип скрипка

http://jsfiddle.net/amu6tw2a/

  • весь код я не могу вставить в свой вопрос, поэтому я вставляю в скрипку, соответствующий код, который я вставляю ниже

https://jsfiddle.net/44tLx225/

zone.js: 140 Uncaught TypeError: Cannot read property 'remove'
of null
at HTMLButtonElement.eval(swimming - jumpings.ts: 990)
at HTMLDocument.dispatch(jquery - 2.2.3. js: 4737)
at HTMLDocument.elemData.handle(jquery - 2.2.3. js: 4549)
at ZoneDelegate.invokeTask(zone.js: 236)
at Zone.runTask(zone.js: 136)
at HTMLDocument.ZoneTask.invoke(zone.js: 304)


$(".tiger").bind("click", function(e) {

  let that = this;





  $(".pai-del-menu").blur(function() {
    $(this).hide();
    pai_to_delete = null;
  });

  $(".pai-del-menu").click(function() {
    $(this).hide();
    //let popup = $("#deletePopup").data("kendoWindow").center().open();
    if (pai_to_delete != null) {
      //$('.addELFDocumentForm').show();
      //alert("Are you sure you want to delete the selected jumping");

      var kendoWindow = $("<div />").kendoWindow({
        title: "Confirm",
        resizable: false,
        modal: true,
        height: 100,
        width: 400
      });

      kendoWindow.data("kendoWindow")
        .content($("#delete-confirmation").html())
        .center().open();

      $(jumping).on("click", "#playerDocumentOk", function() {
        pai_to_delete.remove();
        kendoWindow.data("kendoWindow").close();
      })


      $(jumping).on("click", "#playerDocumentCancel", function() {
        kendoWindow.data("kendoWindow").close();
      })

      //pai_to_delete.remove();
    }

  });


  var record_x = e.pageX;
  var record_y = e.pageY - $(".navHeaderBox").height() - $(".breadCrumbBox").height() - 20;

  $(".pai-del-menu").css({
    left: record_x,
    top: record_y
  });

  $(".pai-del-menu").fadeIn(200);

  $(".pai-del-menu").show();
  $(".pai-del-menu").attr('tabindex', -1).focus();
  pai_to_delete = $(this).parent().parent();

});

работает с родным методом подтверждения js

$(".тигр.)"bind ("click", функция (e) {

      $(".pai-del-menu").blur(function() {
        $(this).hide();
        pai_to_delete = null;
      });

      $(".pai-del-menu").click(function() {
        $(this).hide();
        if (pai_to_delete !== null) {
          //alert("Are you sure you want to delete the selected document");
          //confirm("Are you sure you want to delete the selected document");

          var r = confirm("Are you sure you want to delete the selected document");
          if (r == true) {
              //txt = "You pressed OK!";
              pai_to_delete.remove();
          } else {
              //txt = "You pressed Cancel!";
          }
          //pai_to_delete.remove();
        }

      });


      var pai_x = e.pageX;
      var pai_y = e.pageY - $(".navHeaderBox").height() - $(".breadCrumbBox").height() - 20;

      $(".pai-del-menu").css({
        left: pai_x,
        top: pai_y
      });

      $(".pai-del-menu").fadeIn(200);

      $(".pai-del-menu").show();
      $(".pai-del-menu").attr('tabindex', -1).focus();
      pai_to_delete = $(this).parent().parent();

    });

1 ответов


ключевое различие между собственным методом подтверждения и пользовательским модальным окном-собственный метод подтверждения является синхронным.

когда метод синхронен, и вы нажимаете Ok / Cancel в диалоговом окне native confirm,$(".pai-del-menu").blur даже происходит, но выполняется только после $(".pai-del-menu").click было закончено, поэтому все работает нормально.

когда метод асинхронен и вы нажимаете Ok / Cancel в модальном окне,$(".pai-del-menu").blur даже происходит и выполняется немедленно, удаляя pai_to_delete ссылка, так что внутри $(".pai-del-menu").click событие pai_to_delete уже null.

все, что вам нужно, это назначить pai_to_delete к другой переменной прямо перед kendoWindow создание и использование его внутри $(".pai-del-menu").click событие:

$(".pai-del-menu").blur(function() {
  $(this).hide();
  pai_to_delete = null;
});

$(".pai-del-menu").click(function() {
  $(this).hide();
  if (pai_to_delete != null) {
    var paiToDelete = pai_to_delete;  // <----
    var kendoWindow = $("<div />").kendoWindow({
      title: "Confirm",
      resizable: false,
      modal: true,
      height: 100,
      width: 400
    });

    kendoWindow.data("kendoWindow")
      .content($("#delete-confirmation").html())
      .center().open();

    $(jumping).on("click", "#playerDocumentOk", function() {
      paiToDelete.remove();  // <----
      kendoWindow.data("kendoWindow").close();
    });

    $(jumping).on("click", "#playerDocumentCancel", function() {
      kendoWindow.data("kendoWindow").close();
    });
  }
});