试试这个:
$("#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的排队激励方法,所以在以接近停止工作的原因你点击处理程序,您尝试将淡出的元素添加到队列之后的延迟时间。如果您拨打.stop()
,它将取消任何现有的排队效果,因此您可以立即执行。
另外你的removeMessageLayer()
函数根本没有删除消息元素 - 你只是认为它已经消失了,因为它已经消失了。您的代码
$('body').remove('#message');
...说,如果它传递给remove()
选择,当然它永远不会匹配能清除体内的元素。您需要$('#message').remove();
,并且您不需要测试消息元素是否先存在,因为如果在空的jQuery对象上调用jQuery,则实际上会忽略.remove()
。因此,使用这样的:
function removeMessageLayer() {
$('#message').remove();
}
点击“X”正常工作......你必须确保你没有在点击“Result'小提琴角落,那么它不会开火。 – tymeJV
@tymeJV正确,它确实有效,但是当我将延迟添加到5秒后淡出DIV时,onClick不再有效。我想同时拥有 - 意思是,如果用户在5秒后没有关闭对话框,那么它将自行关闭。 –
我将#message的CSS样式更改为'top:80',将其从'Result'指示符中取消。 – DevlshOne