JQuery - UI Dialog - ищет умное решение для закрытия по времени - PullRequest
1 голос
/ 15 января 2011

Я написал следующее:

// Called with setTimeout(magicDialogDelayedClose, 2500);
function magicDialogDelayedClose() {
    $(".ui-dialog").fadeOut(function() {
        dialog_general.dialog('close');
    }); 
}

Выше вызывается с setTimeout, когда я показываю диалоговое окно с уведомлением, которое я хочу автоматически закрывать через 2,5 секунды.

Проблема, с которой я обращаю внимание, заключается в том, что, если использование Вручную закрывает диалоговое окно, этот таймер все еще работает.Если пользователь затем открывает новое диалоговое окно (что очень возможно), таймер может затем закрыть это новое диалоговое окно.

Каков разумный способ справиться с этим? J

Ответы [ 3 ]

4 голосов
/ 15 января 2011

Грубо говоря, в вашей ситуации вы не хотите иметь функцию, которая применяется глобально.Вы хотите поставить в очередь закрытие каждого диалога, как он появляется.Начиная с версии 1.4, в jQuery реализована функция delay , которая выполняет именно это.Он добавляет нулевое действие в очередь анимации, так что последующие цепные функции анимации появляются после задержки в очереди.

Это будет реализовано следующим образом:

function insertDialog() {
  // substitute your insertion code here
  var d = $('<div class="ui-dialog"></div>').appendTo($('#dialog_area'));

  // add a 2.5s delay into the animation queue, then add
  // a fadeOut with $(this).close() as a callback
  d.delay(2500).fadeOut(function(){ $(this).close() });
}
1 голос
/ 15 апреля 2011

Еще один поворот, занят, поэтому попробовал только в FireFox, но это сработало ...

$('#dialogBox').html("Put some text message here.").dialog("open").delay(2500).fadeOut(function(){ $(this).dialog("close") });
1 голос
/ 15 января 2011

Вы можете очистить тайм-аут (остановить его запуск), сохранив его в переменной и затем применив метод clearTimeout():

var timeout = setTimeout(magicDialogDelayedClose, 200);
clearTimeout(timeout);

Так что, если кто-то вручную закроет ваш диалог, остановите тайм-аут изпродолжая в том же духе.

Безопасный способ очистить тайм-аут - это определить, не является ли timeout нулевым, прежде чем сделать это:

function safeClearTimeout(timeout) {
    if (timeout != null)
        clearTimeout(timeout);
}
...