试试这个:
$("#message").fadeIn('slow').delay(5000).fadeOut('slow');
$('#message a.close-notify').click(function () {
$('#message').stop().fadeOut('slow', removeMessageLayer);
$('#messageContainer').text();
return false;
});
演示:http: //jsfiddle.net/xSRk8/15/
添加自动淡入淡出时单击 X 关闭停止工作的原因是 jQuery 将动画方法排队,因此在您尝试fadeOut()
淡出的元素的单击处理程序中,延迟后被添加到队列中。如果您调用.stop()
它会取消任何现有的排队效果,因此您可以fadeOut()
立即执行。
此外,您的removeMessageLayer()
函数实际上根本没有删除 message 元素 - 您只是认为它已经消失了,因为它已经淡出。你的代码
$('body').remove('#message');
...说如果它与传递给的选择器匹配,则删除 body 元素remove()
,当然它永远不会。您需要$('#message').remove();
,并且不需要首先测试消息元素是否存在,因为 jQuery 本质上忽略了.remove()
对空 jQuery 对象调用的 if。所以使用这个:
function removeMessageLayer() {
$('#message').remove();
}