1

私は現在、jQuery と jQuery ui を使用する製品の Web インターフェイスに取り組んでいます。私たちの製品では、上部にタブ ストリップがあります。最後のタブは「新しいタブ」タブであり、ユーザーがそれをクリックすると、ユーザー用の新しいタブが作成されます (最新のほとんどのブラウザーでのタブ ブラウジングとほとんど同じように機能します)。現在、「新しいタブ」タブで選択イベントをキャッチしており、コールバック関数では、新しいタブを作成して表示するすべての作業を行っています。私が遭遇した最初の問題は、新しいタブが選択されていないことです(jQuery uiタブに選択するように指示したにもかかわらず)。何が起こっているかというと、jQuery ui タブが作成した新しいタブを選択するということです。ただし、コールバックの実行が完了すると、jQuery ui は先に進み、「新しいタブ」タブを再選択します。つまり、実行の流れは次のようになります。

  1. ユーザーが「新しいタブ」タブをクリックする
  2. 一部の jQuery UI コードが実行されます
  3. jQuery ui がコールバック関数を呼び出す
  4. 私のコールバック関数は新しいタブを作成します
  5. 私のコールバック関数はその新しいタブを選択します
  6. jQuery UI は、選択効果を「新しいタブ」タブに適用するコードをさらに実行します

現在、コールバック関数を setTimeout 呼び出し内に配置することで、この問題を回避しています。これは、すべての jQuery ui コードが実行された後にコールバック関数が呼び出されるため、機能します。

私の質問は: setTimeout なしで私がやろうとしていることを達成する方法はありますか?

setTimeout を使用して実行の流れを制御するのはハックであり、今後問題が発生する可能性が高いと思います。選択したイベントを探しましたが、役に立ちませんでした。

これが私のコードです:

$tabs.tabs("option", "select", function(event, ui){
    if( ui.panel.id === tab_id_prefix + "plus-tab"){
        setTimeout( function(){
            tab_set_obj.newTab({}).setTabPage({
                page:       initial_page,
                context:    initial_context,
                title:      initial_title,
                select:     true
            });
        }, 0);
    }
});

編集:正しいタブを選択できます。問題はタイミングの 1 つです。私のコードが現在構造化されている方法では、jQuery UI がすべての作業を完了した後で、目的のタブを選択する必要があります。私は現在 setTimeout を使用してそれを行っていますが、より良い方法があるかどうか疑問に思っていました。

ありがとうございました

4

0 に答える 0