Это звучит как работа для отложенного объекта jQuery.Новое в jQuery 1.5 +
function done() {
var dfd = $.Deferred(),
timeout;
timeout = setInterval(function() {
if (contents available) {
clearInterval(timeout);
return dfd.resolve();
}
}, 50);
return dfd.promise();
}
$('#my-link').bind('click', function(e) {
e.preventDefault();
var $this = $(this);
$.when(done())
.then(function(o) {
//unbind the click event that prevents the default action and click on the link afterward
$this.unbind('click').click();
});
});
Итак, все, что происходит, - это ожидание состояния разрешения / успеха из функции done
.Вы сообщаете своему событию click, что нужно ждать, потому что done
использует отложенный объект и пообещал что-то вернуть.
Я поставил setInterval
, чтобы каждые 50 миль проверять, загружено ли содержимое, затемresolve
Отложенный объект, поэтому будет вызываться событие then
в клике.
Вы можете передать объект в dfd.resolve();
, например, dfd.resolve({ test: true });
.Тогда аргумент o
в then
будет иметь o.test
.
Я использовал Deferred несколько раз, и мне очень понравилось.
Надеюсь, это поможет