【问题标题】:style.display = 'none' click event on modal jumps up to top of pagestyle.display = 'none' 模态上的点击事件跳转到页面顶部
【发布时间】:2020-02-27 19:11:06
【问题描述】:

我有一个显示在我页面上的点击事件上的模式。我在modal右上角的'close'链接元素中添加了一个事件监听器,代码如下:

document.querySelector('.modal__close').addEventListener('click', () => {
            modal.style.display = 'none'
        })

这确实关闭/删除了模式,但是,它也会导致页面“跳转”回顶部(我注意到它还在 url 的末尾添加了一个“#”),即不是我想要的行为,我怎样才能让模式优雅地消失并让底层显示完全一样?

【问题讨论】:

标签: javascript css


【解决方案1】:

可能该元素是一个链接,因此您应该阻止其默认操作(即跟随href 属性中定义的链接)

document.querySelector('.modal__close').addEventListener('click', (ev) => {
      modal.style.display = 'none';
      ev.preventDefault();
})

作为旁注,您可以改用 <button> 元素,这可能更适合此用例。

【讨论】:

  • 就是这样,谢谢!应该想到这一点,我不应该。
【解决方案2】:

我认为你有这样的事情:

<a href="" class="modal__close"></a>

默认情况下,如果链接 (a) 没有定义 href,它会重新加载当前页面(并添加 #)。

要跳过它,您可以使用 event 参数阻止 Javascript 中的默认操作:

document.querySelector('.modal__close').addEventListener('click', (ev) => {
     ev.preventDefault();
     modal.style.display = 'none';
});

在 jQuery 中会更容易:

$('.modal__close').click(function(ev){
    ev.preventDefault();
    $(modal).css('display', 'none'); // can also be $(modal).hide();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多