Вы не можете сделать это, и вы, вероятно, не хотите. Хотя это, конечно, выглядит красиво, в 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)
;
Вы также можете расширить jquery с помощью метода, аналогичного setTimeout:
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)
;
или для вызова с аргументами передайте аргументы в массиве:
$('#alert')
.show()
.delayThis('css', 5000, [ 'display', 'none' ])
;