我正在写这个jquery代码:
$('form').after('<p id="suc"></p>');
$('#suc').html('success !');
$('#suc').show(700);
setTimeout(function(){$('#suc').hide('slow')},2500);
$('#suc').remove();
当我删除这样的$('#suc').remove();
时:
$('form').after('<p id="suc"></p>');
$('#suc').html('success !');
$('#suc').show(700);
setTimeout(function(){$('#suc').hide('slow')},2500);
代码运行成功,但是当我把它运行时,它不会运行!!
那有什么问题?
但$('#suc').remove();
在这里是违法的吗?
答案 0 :(得分:1)
setTimeout
调用不会在代码继续之前等待回调运行,因此您将立即删除该元素。当回调中的代码试图隐藏元素时,它就不存在了。
删除hide
method的complete
回调中的元素:
setTimeout(function(){
$('#suc').hide('slow', function(){
$('#suc').remove();
});
},2500);
答案 1 :(得分:1)
$('#suc').show(700).delay(2500).hide('slow', function () {
$(this).remove();
});
就足够了。
另外,作为一点澄清,关于:
代码运行成功,但是当我把它运行时,它不会运行!!
实际上代码运行(在某种意义上),问题是你的remove
不会等待两个异步事件(setTimeout
和.hide('slow')
)。因此,在这两个人完成他们应该做的事情之前,它会被执行。
答案 2 :(得分:0)
您正在使用已在setTimout之后的语句中删除的元素setTimout
回调。 setTimeout
的回调将在语句删除元素#suc
之后由setTimeout的下一个语句执行。 删除隐藏回调中的#suc
,以便删除后脚本无法访问。
$('form').after('<p id="suc"></p>');
$('#suc').html('success !');
$('#suc').show(700);
setTimeout(function(){
$('#suc').hide('slow',
function(){$(this).remove();
});
},2500);
答案 3 :(得分:0)
您需要将remove()
放在setTimeout
内以及hide()
函数的回调中:
$('form').after('<p id="suc"></p>');
$('#suc').html('success !');
$('#suc').show(700);
setTimeout(function() {
$('#suc').hide('slow', function() { $(this).remove(); })
}, 2500);