4

JS 関数の戻り値をユーザー アクションに依存させることは可能ですか?

では、関数 a と関数 b があるとします。

関数 b は、true を返すボタンと false を返すボタンの 2 つのボタンを含むダイアログを表示します。a から b を呼び出して、操作を続行する前に b からの戻りを待機させることはできますか?

コード例:

function a(){
    if(b()){
        do x
    }else{
        do y
    }
}

function b(){
$("#anElement").dialog({
    title: "This is a Dialog",
    buttons:{
        "Yes": function(){
            //do some stuff
            $(this).dialog("close");
            return true;
        },
        Cancel: function(){
            //do some stuff
            $(this).dialog("close");
            return false;
        }
    }
});
}

これは確認によく似ていると思いますが、その上に「はい/いいえ」以上のものを構築したいと考えています。助言がありますか?

4

2 に答える 2

2

いいえ、関数の実行を停止することはできません (まあ、ブレーク条件付きの無限 while ループを使用することはできますが、それはひどい習慣です)。ただし、A を 2 つの関数に分割し、関数 B から関数 A の残りの半分を呼び出すこともできます。戻り関数を関数 B に渡して呼び出し、ユーザー アクションの値を渡すこともできます。

例:

function A() {
    // do stuff
    B(finishA);
}

function B(callback) {
    if(someCondition) {
        callback(true);
    } else {
        callback(false);
    }
}

function finishA(userInput) {
    if(userInput) {
        // do something if the user clicked okay
    } else {
        // do something if the user clicked cancel
    }
}
于 2012-05-08T15:03:31.470 に答える
1

1つの解決策は...

function a () {
    b( function () {
        // do x           
    }, function () {
        // do y
    });
}

function b ( fn1, fn2 ) {
    $( "#anElement" ).dialog({
        title: "This is a Dialog",
        buttons: {
            "Yes": function () {
                //do some stuff
                $( this ).dialog( "close" );
                fn1();
            },
            "Cancel": function () {
                //do some stuff
                $( this ).dialog( "close" );
                fn2();
            }
        }
    });
}

したがって、2 つの関数を に渡しますb。最初の機能は「はい」ボタンがアクティブ化された場合に呼び出され、2 番目の機能は「キャンセル」ボタンがアクティブ化された場合に呼び出されます。

aこのパターンを使用すると、関数に追加するのではなく、関数内で直接動作を定義できますb

于 2012-05-08T15:09:08.047 に答える