获取关闭模态的元素

Posted

技术标签:

【中文标题】获取关闭模态的元素【英文标题】:Get the element that closed the modal 【发布时间】:2017-04-18 16:14:02 【问题描述】:

在我的 html 中,我的一个模态中有这个:

<a href="#" class="clicker" data-dismiss="modal">Click</a>

如果单击此元素,它将隐藏模式。

但是,我希望能够在 jQuery 中获取关闭模式的元素,例如:

$('#myModal').on('hidden.bs.modal', function(event)

    var invoker = $(event.relatedTarget);
);

但这不起作用。 relatedTarget 似乎只适用于 show.bs.modalshown.bs.modal (as per the documentation)。

那么我怎样才能在hidden.bs.modal 事件中获取导致模式关闭的元素?

【问题讨论】:

event.target 中没有吗? 我创建了一个代码笔来测试@AllanStepps 解决方案,但 event.target 指向整个模式,而不是点击的元素。 event.currentTarget 呢? (= 附加了事件侦听器的节​​点。)developer.mozilla.org/en-US/docs/Web/Events/click 相同的结果@AllanStepps。正如您在我的回答中看到的那样,我设法通过其他方式实现了目标。 【参考方案1】:

I have made a Pen to show how to achieve the desired result。正如您在此示例中所见,Bootstrap 产生的事件不共享用于关闭模式的确切元素。他们将整个模态元素本身称为.target.currentTarget

所以,为了获取被点击关闭模式的元素,我使用了 jQuery 选择器功能。像这样:

$("[data-dismiss='modal']").click(function() 
  $("#data-dismiss").html('#'+ $(this).attr('id'));
);

在这种情况下,jQuery 正在搜索每个具有属性 data-dismiss 和值 modal 的元素,并为找到的元素附加一个回调函数,当它们被单击时执行。

正如您在我制作的示例中看到的那样,有两个具有此属性的按钮。模态标题中的一个:

<button id="header-close-button" type="button"
        class="close" data-dismiss="modal" aria-label="Close">
    <span aria-hidden="true">&times;</span>
</button>

模态页脚中的另一个:

<button id="footer-close-button" type="button"
        class="close" data-dismiss="modal" aria-label="Close">
    <span aria-hidden="true">Close</span>
</button>

这两个按钮都有不同的 ID,我设置了这些 ID 以表明您可以通过附加到单击事件的回调函数上的 $(this).attr('id') 来检查哪个按钮被点击了。

【讨论】:

以上是关于获取关闭模态的元素的主要内容,如果未能解决你的问题,请参考以下文章

使用 BackgroundWorker 关闭模态窗口

为啥我不能将用于关闭模态组件的“a”元素居中?

py+selenium 无法定位ShowModalDialog模态窗口已解决

单击按钮上的关闭模式反应本机

js中怎么获取bootstrap datetimepicker 弹出的位置

如果模态关闭并重新打开或验证捕获丢失的输入,则使用 .one 提交的模态表单提交多个