【问题标题】:changing modal-close behavior改变模态关闭行为
【发布时间】:2020-08-21 12:17:20
【问题描述】:

感谢我的工作是调试一年前离开我公司的某人的代码。我是 jquery 的新手,我正在为手头的任务而苦苦挣扎。

该应用程序是一个商店/库存管理 ASP.NET 应用程序。有一个概述页面,其中列出了所有商店。您可以编辑商店。所以它的功能是:

$(document).on('click', '.js-open-edit-modal', function () {
    $("#EditWinkelModal").load("/Winkels/Details/" + $(this).data("id"), function () {
        $("#modal-winkel-edit").modal();
    });
});

打开一个模式。到目前为止一切正常。问题是当用户关闭模式时。这可以通过按右上角的“X”、按转义键、单击模态框外或按一个按钮来完成,定义为

<button type="button" class="c-btn c-btn--secondary" modal-close>Annuleer</button>

发生的情况是这只隐藏了模式(将“显示”设置为“无”。它不会删除添加的代码。所以现在,当用户编辑另一个商店时,更多的代码会添加到页面中。并且代码冲突。 这是 Chrome 检查的图片,在我编辑了一些商店之后(在我的语言/荷兰语中称为“winkel”)

我已经找到了解决按钮问题的方法。我刚改成

<button type="button" class="c-btn c-btn--secondary"  id="cancelWinkelAdd">Annuleer</button>

并添加代码

$(document).on('click', '#cancelWinkelEdit', function () {
    $.modal.close();
    var element = $("#modal-winkel-edit")[0];
    element.parentNode.removeChild(element);
});

但这只能解决按钮的问题。所有其他关闭选项(如上所述)仍然存在问题。所以现在我正在寻找一种方法来覆盖这个close-modal 方法。

我应该怎么做,或者有更好的解决方案吗?

【问题讨论】:

  • 我建议改变方法 - 不是每次都加载整个.modal,而是在启动时在页面上放置一个模态的“shell”,然后只将模态内容放入.modal-body - 这样你只有一个模式来显示/隐藏,当你编辑第二个项目时,它会覆盖.modal-body 中的第一个项目,所以你永远不会发生冲突。这种方法适用于引导模态,但不清楚您使用的是什么模态插件/框架,因此它可能不是一个选项。

标签: javascript jquery asp.net


【解决方案1】:

看起来您正在使用jQuery-modaljQuery-modal 有一个通过某些操作触发的事件列表。您可以监听模式关闭时触发的事件。

$.modal.AFTER_CLOSE = 'modal:after-close';
// Fires after the modal has fully closed (including animations).

并在调用此事件时从 DOM 中删除模态

$('#example-modal').on($.modal.AFTER_CLOSE, function(event, modal) {
    modal.remove(); // <-- delete the modal from the DOM
});

更多信息可以在这里找到:https://github.com/kylefox/jquery-modal#events

【讨论】:

  • 谢谢!我不得不将其更改为 $(document).on($.modal.AFTER_CLOSE, '#modal-winkel-edit', function () {modal.remove(); 并没有为我做任何事情,但你指出了我正确的方向。
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多