你不能这样做,而且你可能也不想这样做。虽然看起来确实很漂亮,但 Javascript 中没有任何机制可以让您在不循环“等待”直到时间过去的情况下做到这一点。您当然可以这样做,但您可能会严重降低浏览器性能,并且如果您的超时时间超过几秒,浏览器将向用户显示您的 JavaScript 似乎被卡住的警告。
正确的方法是设置超时:
var el = $('#alert');
el.show()
setTimeout(function() { el.hide() }, 5000);
您的另一个选择是扩展 jquery 来本质上为您想要延迟的操作添加效果:
jQuery.fn.extend({
delayedHide: function(time) {
var self = this;
setTimeout(function() { self.hide(); }, time);
}
});
$('#alert')
.show()
.delayedHide(5000)
;
您还可以使用类似于 setTimeout 的方法来扩展 jquery:
jQuery.fn.extend({
delayThis: function(fn, time, args) {
var self = this;
setTimeout(function() { jQuery.fn[fn].apply(self, args); }, time);
}
});
$('#alert')
.show()
.delayThis('hide', 5000)
;
或者使用 args 进行调用,在数组中传递参数:
$('#alert')
.show()
.delayThis('css', 5000, [ 'display', 'none' ])
;