我遇到一个问题:如果将模式包装在标签中,则不会触发模式。 在我的示例中,如果单击链接的“常规”字体样式部分,则会正确触发,如果单击斜体的位置,则不会触发。
有什么想法吗?
JS
$(function () {
const openModals = [];
$('.modal-button').click(e => {
e.preventDefault();
$(e.target).closest('.modal').add('body').addClass('open');
openModals.push($($(e.target).attr('href')).show());
});
$(window).add('.close').click(e => {
e.stopPropagation();
if ($(e.target).is('.modal, .close')) {
const closing = openModals.pop().addClass('modal-content-active');
setTimeout(() => {closing.hide().removeClass('modal-content-active')}, 0);
if (openModals.length > 0) {
openModals[openModals.length - 1].removeClass('open');
} else $('body').removeClass('open');
}
});
});
答案 0 :(得分:1)
在第一个事件处理程序中,您引用的是“目标”而不是“ currentTarget”
e.target
代表被单击的确切元素-在您的情况下为<em/>
-而e.currentTarget
代表元素事件处理程序附加到,即您的href
值在哪里。
我将第一个事件处理程序中对e.target
的两个引用更改为e.currentTarget
,事情应该按预期进行。
$('.modal-button').click(e => {
e.preventDefault();
$(e.currentTarget).closest('.modal').add('body').addClass('open');
openModals.push($($(e.currentTarget).attr('href')).show());
});
答案 1 :(得分:0)
https://jsfiddle.net/qLpcfx8k/ 您只需要向标签传递相同的href并感到高兴:)
<a href="#myModal1" class="modal-button">This is the trigger <em href="#myModal1"> for the first modal</em></a><br>
<a href="#myModal3" class="modal-button">This is the trigger <em href="#myModal1"> for the second modal</em></a>