3

単純化されたシナリオ:

  • ボタンにクリックイベントがあります
  • イベント内で関数 X を呼び出します
  • 関数 X が値を返す
  • 受信したデータを使用して DOM を変更するクリック イベント (実際には jQuery テンプレートをレンダリングします)

サンプルコード:

$("button").click(function()
{
    var response = FunctionX();

    doTemplateRendering(response); //(*)
});

function FunctionX()
{
    //some code

    return some_value;

    //The click event has finished, so now make a little adjust to the generated dom (*)
}

質問は次のとおりです。

  • クリックがいつフォームを停止するかを判断する方法はありますFunctionX()か?
  • または、doTemplateRendering()キャプチャできる何かをトリガーする方法があるFunctionX()ので、値を返すかどうかは問題ではありません。ある時点で、必要な追加のコードを実行できるようになるからです。

これの背後にある理由は、これがフレームワークの一部であり、クリック イベントを変更できないためです。

4

2 に答える 2

2

関数から値を返し、同じ関数内でさらに処理を行うことはできません。ただし、次を使用して後で実行するように一部のコードをスケジュールできますsetTimeout()

function FunctionX()
{
    //some code    

    setTimeout(function() {
        //The click event has finished, so now make a little adjust to the generated dom (*)
    }, 5);

    return some_value;
}

JS はシングルスレッド (Web ワーカーを無視する場合) であるため、timeout に渡す関数は、クリック イベントが終了するまで実行されません。

別の方法として、2 番目のクリック ハンドラーを同じボタンにバインドし、そこで追加の処理を行うこともできます。jQuery は、(同じイベントと要素の) イベント ハンドラーがバインドされた順序で実行されることを保証します。

于 2013-04-18T13:06:27.910 に答える
0

これでうまくいくかどうかわかりませんが、FunctionX に渡すコールバック関数を使用できませんでしたか?

$("button").click(function()
{
    var fn = funcion(){response){
         doTemplateRendering(response);
    }
    FunctionX(fn);

});

function FunctionX(fn)
{
    //some code

    fn(some_value);

    //The click event has finished, so now make a little adjust to the generated dom (*)
}
于 2013-04-18T13:12:13.233 に答える