javascript - 我可以添加叠加层,但无法删除它 (jQuery)

标签 javascript jquery html css overlay

此函数向整个浏览器屏幕添加具有以下属性的叠加层,

$('a.cell').click(function()    {
    $('<div id = "overlay" />').appendTo('body').fadeIn("slow");
});

#overlay
{
background-color: black;
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
display: none;
z-index: 100;
opacity: 0.5;
}

这个函数应该删除它。

$('#overlay').click(function()  {
    $(this).fadeOut("slow").remove();
});

但它似乎什么也没做,现在我的页面被黑色过度覆盖。删除有什么问题?

最佳答案

问题是,当您添加 click 处理程序时,没有任何覆盖,因此您将处理程序添加到一组空元素。

要解决此问题,请使用 live方法将您的处理程序绑定(bind)到所有匹配 #overlay 的元素,只要它们被创建。

此外,fadeOut 不是阻塞调用,因此它会在元素完成淡出之前返回。因此,您在元素开始淡出后立即调用remove

要解决此问题,请使用 fadeOut 的回调参数在动画结束后调用 remove

例如:

$('#overlay').live(function() { 
    $(this).fadeOut("slow", function() { $(this).remove(); });
});

关于javascript - 我可以添加叠加层,但无法删除它 (jQuery),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1633773/

相关文章:

javascript - 在javascript中将扁平数组推送到另一个数组

jquery - 如何使用 CSS 实现此定位?

javascript - 使用 PHP 进行 JQuery 表单验证

javascript - 我可以在定义后添加到 javascript 对象吗?

javascript - 需要重构这个JS,不知道从哪里开始

html - 将内联 css 应用于子元素

javascript - 在页面上设置 iframe

javascript - 错误:Cannot call method 'reverse' of null

html - 变换 :rotate not working in IE with a masterpage

javascript - 属性应该出现在原型(prototype)上吗?