Как отложить перед close () и перенаправить?

Возможный дубликат:
Есть ли функция сна? в JavaScript?

Как я могу добавить задержку к этому, чтобы закрыть и перенаправить через столько секунд, пожалуйста?

<script type="text/javascript">
  $(function() { parent.$.fancybox.close(); });
  window.parent.location.href = '/shop/basket';
</script>

person Henry Bishop    schedule 24.01.2013    source источник
comment
какой смысл закрывать что-либо при мгновенном перенаправлении?   -  person jAndy    schedule 25.01.2013
comment
@jAndy: в вопросе предлагается `закрыть и перенаправить через столько секунд`   -  person Matt Burland    schedule 25.01.2013
comment
@jAndy можно только предположить, что функция закрытия fancybox делает что-то еще важное? :)   -  person georgedyer    schedule 25.01.2013
comment
@jAndy: Очевидно, они хотят закрыть и перенаправить.   -  person Matt Burland    schedule 25.01.2013
comment
@MattBurland: на самом деле я хотел сказать ... если close и redirect происходят одновременно, закрытие не имеет особого смысла. Я мог бы купить его, если вы хотите закрыть ящик, подождать немного и затем выполнить перенаправление.   -  person jAndy    schedule 25.01.2013


Ответы (3)


window.closeAndRedirect = function() {
    parent.$.fancybox.close();
    window.parent.location.href = '/shop/basket';
}

setTimeout(closeAndRedirect, 5000); // 5 seconds

@jAndy указал: зачем вам что-то закрывать, если вы все равно перенаправляете?

может ты имел ввиду закрыть, ТО перенаправить через 5 секунд после закрытия? Если так:

parent.$.fancybox.close(function() {
    setTimeout(function() {
       window.parent.location.href = '/shop/basket';
    });
});

предполагая, что close имеет обратный вызов. Если нет, возможно:

parent.$.fancybox.close();
setTimeout(function() {
    window.parent.location.href = '/shop/basket';
});
person georgedyer    schedule 24.01.2013
comment
Зачем оставлять jQuery $(document).ready()? Через 5 секунд, если DOM еще не загружен, он все равно сразу перенаправит. - person Matt Burland; 25.01.2013
comment
хорошая точка зрения. моя оплошность из-за копирования и вставки :). Я внес правку. - person georgedyer; 25.01.2013

Используйте setTimeout и вызовите свою функцию из обратного вызова.

Что-то типа:

$(function() { 
    setTimeout(function() {
        parent.$.fancybox.close(); 
        window.parent.location.href = '/shop/basket';
    }, 5000);
});

подождать 5 секунд, начать с того момента, когда DOM будет готов.

person Matt Burland    schedule 24.01.2013

На самом деле, вам не нужно делать это из открытой (дочерней) страницы, а непосредственно на родительской странице .... просто используйте setTimeout внутри обратного вызова в вашем пользовательском скрипте fancybox, чтобы запрограммировать < em> закрыть и перенаправление, например:

$(".fancybox").fancybox({
    afterLoad: function () {
        setTimeout(function () {
            $.fancybox.close();
            window.location.href = "/shop/basket";
        }, 5000); // 5000 = 5 secs
    }
});

См. JSFIDDLE.

person JFK    schedule 24.01.2013