在 Bootstrap Modal 上捕获关闭事件

问题描述 投票:0回答:9

我有一个 Bootstrap Modal 来选择事件。 如果用户单击 X 按钮或模式之外,我想将它们发送到默认事件。 我如何捕捉这些事件?

这是我的 HTML 代码:

<div class="modal" id="myModal">
    <div class="modal-dialog">
        <div class="modal-content event-selector">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
                <center><h1 class="modal-title event-selector-text">Select an Event</h1><center>
            </div>
            <div class="container"></div>
            <div class="modal-body">
                <div class="event-banner">
                    <a href="/?event=1">
                        <img src="<?php echo IMAGES_EVENT1_LOGO; ?>" width="100%">
                    </a>
                </div>
                <div class="event-banner">
                    <a href="/?event=2">
                        <img src="<?php echo IMAGES_EVENT2_LOGO; ?>" width="100%">
                    </a>
                </div>
            </div>
        </div>
    </div>
</div>

twitter-bootstrap events bootstrap-modal
9个回答
251
投票

这与另一篇 stackoverflow 文章 将函数绑定到 Twitter Bootstrap Modal Close 非常相似。 假设您使用的是 Bootstap v3 或 v4 的某个版本,您可以执行以下操作:

$("#myModal").on("hidden.bs.modal", function () {
    // put your default event here
});

31
投票

虽然在另一个堆栈溢出问题中得到了回答将函数绑定到 Twitter Bootstrap Modal Close,但为了视觉感受,这里有更详细的答案。

来源:http://getbootstrap.com/javascript/#modals-events


17
投票

我尝试使用它但没有成功,猜测这只是模态版本。

尽管如此,它的工作原理是这样的:

$("#myModal").on("hide.bs.modal", function () {
    // put your default event here
});

只是为了更新答案=)


10
投票

在 Bootstrap 5 中捕获关闭事件,无需 jquery:

var myModalEl = document.getElementById('myModal')
myModalEl.addEventListener('hidden.bs.modal', function (event) {
  // do something...
})

7
投票

这对我有用,任何人都可以尝试:

$("#myModal").on("hidden.bs.modal", function () {
    for (instance in CKEDITOR.instances)
        CKEDITOR.instances[instance].destroy();
    $('#myModal .modal-body').html('');    
});

您可以在模态窗口中打开ckEditor


1
投票

检查的替代方法是:

if (!$('#myModal').is(':visible')) {
    // if modal is not shown/visible then do something
}

0
投票

我在使用 Microsoft Visual Studio 2019、Asp.Net 3.1 和 Bootstrap 4.5 的 Web 应用程序中遇到了同样的问题。 我打开了一个模式表单来添加新的员工(只有几个输入字段),“添加员工”按钮将调用 ajax 调用以在数据库中创建员工记录。 成功返回后,代码将刷新部分员工剃刀页面(因此新员工将出现在列表中)。

在刷新之前,我将关闭“添加人员”模式并显示“请等待”模式,该模式上只有一个引导旋转按钮。 发生的情况是,在人员刷新并调用该模式上的 modal('hide') 函数后,“请等待”模式将保持显示状态,而不是关闭。有时,模式会消失,但模式背景仍会有效锁定员工列表表单。

由于 Bootstrap 存在同时打开多个模式的问题,我想当显示“请稍候”模式时,“添加人员”模式可能仍然打开,这会导致问题。 我创建了一个函数来显示“请等待”模式并进行刷新,并使用 Javascript 函数 setTimeout() 调用它,以在关闭/隐藏“添加人员”模式后等待 1/2 秒:

//hide the modal form
$("#addNewStaffModal").modal('hide');
setTimeout(RefreshStaffListAfterAddingStaff, 500); //wait for 1/2 second

以下是刷新功能的代码:

function RefreshStaffListAfterAddingStaff() {
    // refresh the staff list in our partial view

    //show the please wait message
    $('#PleaseWaitModal').modal('show');

    //refresh the partial view
    $('#StaffAccountsPartialView').load('StaffAccounts?handler=StaffAccountsPartial',
        function (data, status, jqXGR) {

            //hide the wait modal
            $('#PleaseWaitModal').modal('hide');
            // enable all the fields on our form
            $("#StaffAccountsForm :input").prop("disabled", false);

            //scroll to the top of the staff list window
            window.scroll({
                top: 0,
                left: 0,
                behavior: 'smooth'
            });

        });
}

这似乎完全解决了我的问题!


0
投票
$("myModal button.close").click(function() {        
      // do something ...
});

0
投票
modal._element.addEventListener("hide.bs.modal", function ()
    {
        alert(2)
    });
© www.soinside.com 2019 - 2024. All rights reserved.