-1

ユーザーに質問をするダイアログ ボックスが表示されます。これは次のような関数です。

function confirmBox2(action) {

    var message = "";

    if (action == "Quit") {

        message = "Are you sure you want to quit without saving?";

    }
    else if (action == "Delete") {

        message = "Confirm you want to Delete?";

    }
    else if (action == "Save") {

        message = "Are you sure you want to Save Changes?";

    }


    $('body').append('<div id="dialog-box" style="display:none;">' + message + '</div>');

    $('#dialog-box').dialog({
        modal: true,
        buttons: {
            Yes: function () {

                $(this).dialog("close");
                $('#dialog-box').remove();

                return true;
                //history.back(-1);

            },
            NO: function () {
                $(this).dialog("close");
                $('#dialog-box').remove();

                return false;

            }
        }
    });
}

Yes は true を返し、No は false を返すことがわかります。みたいなことができるようになりたい

if(confirmBox2("Quit")){

    // do something here
}

私が抱えている問題は、コードが非同期で実行されており、ダイアログの回答が選択されるのを待っていないことです。どうすればこれを回避できますか?

ありがとう

4

1 に答える 1

1

さらに2つのパラメーターを受け入れるように確認機能を変更しました。1 つは「はい」をクリックしたときに呼び出す関数の名前で、もう 1 つは「いいえ」をクリックしたときに呼び出す関数の名前です。ダイアログ呼び出しはブロック呼び出しまたは同期呼び出しではないため、以前のバージョンではダイアログを開いてすぐに関数を終了していたため、戻る前にダイアログを閉じるまで関数は待機しませんでした。結果が出なかったのはそのためです。このメソッドでは、「はい」のクリックを処理する関数と「いいえ」のクリックを処理する関数を作成し、対応するボタンがクリックされたときにそれらを呼び出します。

function confirmBox2(Action, YesCallback, NoCallback) {
    var message = "";
    if (Action == "Quit") {
        message = "Are you sure you want to quit without saving?";
    } else if (Action == "Delete") {
        message = "Confirm you want to Delete?";
    } else if (Action == "Save") {
        message = "Are you sure you want to Save Changes?";
    }

    $('body').append('<div id="dialog-box" style="display:none;">' + message + '</div>');

    $('#dialog-box').dialog({
        modal: true,
        buttons: {
            "Yes" : function () {
                $(this).dialog("close");
                $('#dialog-box').remove();
                YesCallback();
            },
            "No" : function () {
                $(this).dialog("close");
                $('#dialog-box').remove();
                NoCallback();
            }
        }
    });
}

function onDialogYes() {
    // handle the "yes" click here
}

function onDialogNo() {
    // handle the "no" click here
}

confirmBox2("Quit", onDialogYes, onDialogNo);

または、このように、コールバック関数をパラメーターとして渡さずに行うこともできます...

function confirmBox2(Action) {
    var message = "";
    if (Action == "Quit") {
        message = "Are you sure you want to quit without saving?";
    } else if (Action == "Delete") {
        message = "Confirm you want to Delete?";
    } else if (Action == "Save") {
        message = "Are you sure you want to Save Changes?";
    }

    $('body').append('<div id="dialog-box" style="display:none;">' + message + '</div>');

    $('#dialog-box').dialog({
        modal: true,
        buttons: {
            "Yes" : function () {
                $(this).dialog("close");
                $('#dialog-box').remove();
                onDialogYes();
            },
            "No" : function () {
                $(this).dialog("close");
                $('#dialog-box').remove();
                onDialogNo();
            }
        }
    });
}

function onDialogYes() {
    // handle the "yes" click here
}

function onDialogNo() {
    // handle the "no" click here
}

confirmBox2("Quit");

おそらく、ボタンのイベント ハンドラーに渡したいと思うでしょうAction。そうすれば、どのアクションを扱っているかがわかります。

于 2013-02-22T10:37:32.213 に答える