Диалог оповещения исчез до подтверждения

Я просто писал код и столкнулся с такой проблемой:

alertify.dialog("confirm").set(
{
    'labels':
    {
        ok: 'Personal',
        cancel: 'Share'
    },
    'message': 'Select target:',
    'onok': function()
    {
        alertify.confirm($("#dir_select_user").get(0), function()
        {
            var i = $("#dir_select_user .dir_selector").val();
            t.find(".move_des").val(i);
            t.find(".move_verify").val("1");
            t.submit();
        }).set('labels',
        {
            ok: alertify.defaults.glossary.ok,
            cancel: alertify.defaults.glossary.cancel
        });
    },
    'oncancel': function()
    {
        alertify.confirm($("#dir_select_share").get(0), function()
        {
            var i = $("#dir_select_share .dir_selector").val();
            t.find(".move_des").val(i);
            t.find(".move_verify").val("1");
            t.submit();
        }).set('labels',
        {
            ok: alertify.defaults.glossary.ok,
            cancel: alertify.defaults.glossary.cancel
        });
    }
})   }).show();

Я использую alertifyjs библиотека от http://alertifyjs.com/ (не от http://fabien-d.github.io/alertify.js/).

Если вы попробуете этот код, вы обнаружите, что диалоги "onok" и "oncancel" быстро исчезают после выбора personal или же share,

В чем здесь проблема? Как я могу решить это?

1 ответ

Решение

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

У вас есть 2 решения для этого:

  1. Задержка, показывающая второе подтверждение, пока первое подтверждение фактически не закроется.

    alertify.confirm("confirm ? ", 
        function onOk() {
            //delay showing the confirm again 
            //till the first confirm is actually closed.
            setTimeout(function () {
                alertify.confirm("confirm another time ?");
            }, 100);
        },
        function onCancel() {
            //no delay, this will fail to show!
            alertify.confirm("this will not be shown!");
        }
    );
    
  2. Создайте свое собственное временное (многоэкземплярное) подтверждение, просто наследуйте от существующего.

    // transient (multi-instance)
    alertify.dialog('myConfirm', function factory(){ return {};},true,'confirm');
    alertify.myConfirm("confirm ? ", function(){
        alertify.myConfirm("confirm another time ?");
    });
    

    Примечание: будьте осторожны с этим, так как каждый вызов переходного диалога будет создавать новый экземпляр, вы можете сохранить ссылки на запущенные экземпляры и использовать их повторно!

Смотрите демо здесь.

Другие вопросы по тегам