9

javascriptのconfirm()の代わりをしようとしています。完全にカスタマイズできるjquerydialog()関数を見つけました。問題は、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'));
}
4

2 に答える 2

28

truejQueryUIダイアログボックスは、またはfalseを他のコンテンツの上に表示されているとおりに返すことはできませんが、実行ブロックすることはできません。

あなたができる最善のことは:

  1. modal他のコンテンツを非表示にするようにボックスを作成します

  2. 選択したオプションに応じて使用するコールバックを提供します。

追加のボーナスポイントについては、$.Deferred()promiseオブジェクトを作成し、ダイアログを表示したときにそれを返すことができます。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.
于 2012-05-22T13:31:56.653 に答える
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
                }
            }
        );
于 2015-03-10T20:15:17.490 に答える