Модальное диалоговое окно jQuery не останавливается для пользовательского ввода - PullRequest
2 голосов
/ 15 января 2012

Я новичок в jQuery, но уже успешно реализовал несколько модальных диалогов, используя виджет диалога jqueryUI.При попытке реализовать еще одно, открывается модальное диалоговое окно, но код продолжает выполняться без остановки для пользовательского ввода.Использование jQuery 1.7.1 и jquery-ui-1.8.16.

Вот определение «прототипа» диалога (это «прототип», потому что он не выполняет действия с ««ОК» (выбор, который необходим для удовлетворения требований):

var $confirm = $('#confirm');
$confirm.dialog(
{
    autoOpen:false,
    width:440,
    modal:true,
    buttons:
    {
        OK: function()
        {
            $( this ).dialog( 'close' );
        },
        Cancel: function()
        {
            $( this ).dialog( 'close' );
        }
    }
});

Вот некоторый тестовый код, который открывает диалоговое окно:

[ some javascript that does error checking]
alert('stop1');
$('#confirm').dialog('open');
alert('stop2');
[ more javascript including submitting the form]

Что происходит, когда отображается первое предупреждение.При нажатии на него открывается диалоговое окно со вторым предупреждением, указывающее, что диалоговое окно не ожидает ввода пользователя.Второе предупреждение является модальным и препятствует доступу к диалогу.Когда она нажата, форма отправляется.Эта последовательность показывает, что диалоговое окно не ожидает ввода пользователя.

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

Ответы [ 3 ]

1 голос
/ 15 января 2012

Диалог не будет ждать. Вместо этого вы захотите использовать это как точку, чтобы решить, что вы хотите, чтобы произошло. Поэтому вместо включения дополнительного кода, который вы можете или не хотите запускать после модального диалогового окна, пусть это будет последняя часть функции.

Затем, с вашими функциями OK или Отмена, сделайте вызов там, чтобы продолжить рабочий процесс, если они выбрали ОК, или просто спрячьте и сделайте все, что нужно для отмены, с отменой.

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

0 голосов
/ 02 мая 2019

Вы должны использовать обещание:

function deferredConfirm(message) {

$('<div></div>').html(message).dialog({
    dialogClass: 'confirmDialog',
    buttons:
    [{
        text: buttonText,
        click: function () {
            $(this).dialog("close");
            defer.resolve();
        }
    },
    {
        text: buttonText2,
        click: function () {
            $(this).dialog("close");
            defer.reject();
        }
    }],
    close: function () {
        $(this).remove();
    }
});

    return defer.promise();
}

И назвать его:

            deferredConfirm("Oh No!").then(function() {
               //do something if dialog confirmed
            });
0 голосов
/ 16 января 2014

Пожалуйста, смотрите мой пост здесь: jQuery Отложено и диалоговое окно

Это будет имитировать обычное всплывающее окно подтверждения JavaScript, но с хорошим стилем в jQuery.

...