Вопрос по jquery, javascript – JQuery UI диалог с логическим возвратом - истина или ложь

9

Я пытаюсь сделать замену дляjavascript подтвердить (). Я нашел функцию диалога jquery (), которая может быть полностью настроена. Проблема в том, что я не могу вернуть егоtrue или жеfalse.

Вот мой код:

$('#delBox').dialog(
        { autoOpen: false, resizable: false, modal: true, closeOnEscape: true, width: 300, height: 'auto', title: 'Deletar registro',
            buttons: {
                "Ok": function () {
                    return true;
                }, "Cancelar": function () {
                    $(this).dialog("close");
                    return false;
                }
            },
            open: function () {
                var buttonsSet = $('.ui-dialog-buttonset').find("button:contains('Ok')");
                buttonsSet.attr("class", "ui-button ui-state-default");
                $('.ui-dialog-titlebar-close span').empty();
                $('.ui-dialog-buttonset').find("button:contains('Ok')").button({
                    text: false,
                    icons: {
                        primary: 'ui-icon-ok'
                    }
                });

                $('.ui-dialog-buttonset').find("button:contains('Cancelar')").button({
                    text: false, 
                    icons: {
                        primary: 'ui-icon-cancel'
                    }
                });
            }
        });

Это только возвращает объект перед любой выбранной опцией:

function deletar() {
     alert($('#delBox').dialog('open'));
}

Ваш Ответ

2   ответа
28

true или жеfalse как они показаны поверх другого контента, ноwithout блокировка исполнения.

Лучшее, что вы можете сделать, это:

make the box modal so that it hides the other content

supply callbacks to be used depending on which option is chosen.

Для дополнительных бонусных баллов, вы можете создать$.Deferred() обещать объект и вернуть его, когда вы показываете диалог. Вы можете тогдаresolve или жеreject это обещание в обработчиках событий кнопки.

Это даст вам четкое разделение между отображением диалогового окна и выполнением последующих действий, вызванных им:

function showDialog() {
   var def = $.Deferred();

   // create and/or show the dialog box here
   // but in "OK" do 'def.resolve()'
   // and in "cancel" do 'def.reject()'

   return def.promise();
}

showDialog().done(function() {
    // they pressed OK
}).fail(function() {
    // the pressed Cancel
});

// NB: execution will continue here immediately - you shouldn't do
//     anything else now - any subsequent operations need to be
//     started in the above callbacks.
@buffer, вам вообще не нужно явно связывать какие-либо события - просто укажите обратные вызовы в начальных параметрах диалога.
@AtesGoral да,def.promise() было бы предпочтительнее - хорошая точка.
+1 для отложенных
ВshowDialog я должен связать события сOK & Амп;Cancel с помощью$.one то есть событие будет добавляться для однократного выполнения каждый разshowDialog называется? Есть ли способ использовать$.on то есть связать их один раз и использоватьshowDialog несколько раз?
Как вы думаете, должна ли функция возвращать полноценный отложенный объект или ограниченный интерфейс Promise черезreturn def.promise()?
7

что просто добавлю немного кода, показывающего, как можно вернуть нажатую кнопку:

function ShowYesNoMessage(title, message) {
var def = $.Deferred();
$("#infoMessage").html(message);

$("#dialog_infoMessage").dialog({
    modal: true,
    title: title,
    buttons: {
        Yes: function () {
            $("#infoMessage").html("");
            $(this).dialog("close");
            def.resolve("Yes");
        },
        No: function () {
            $("#infoMessage").html("");
            $(this).dialog("close");
            def.resolve("No");
        }
    }
});
return def.promise();
}


$.when(ShowYesNoMessage("Are you sure", message)).then(
            function(status) {
                if (status == "Yes") {
                    //do the next step
                }
            }
        );
Лично для двоичного выбора я предпочитаю.resolve / .reject сочетание. О, и нет необходимости в$.when если функция вызывается внутри$.when возвращает обещание
Спасибо за показ, может вернуть значение в пределах разрешения.
Хорошее дополнение Алнитак - спасибо

Похожие вопросы