0

タイトルが示すように、Jqueryで関数の実行順序を維持/制御するにはどうすればよいですか?を介して多くのイベントハンドラーを確立できることは知っていますaddEventListenerが、それらの実行順序は保証されていません。引用させてください

ハンドラーは確立された順序で起動しますが、この順序は標準によって保証されていないことに注意してください。このコードのテスターは、確立の順序以外の順序を観察したことはありませんが、この順序に依存するコードを作成するのは愚かなことです。要素に設定された複数のハンドラーがランダムな順序で起動する可能性があることに常に注意してください。

Jqueryのマニングアクション第2版

また、jquery(AFAIK)をだまして、メソッドを使用して特定の順序でハンドラーを実行しqueue()メソッドdequeue()を呼び出して、キューの作成時に定義された順序で、そのキュー内のメソッドを呼び出すことができます。ただし、これは永続的な解決策ではありません。デキューは定義された順序でそれらを実行しますが、実行後にキューから削除します。したがって、これは1回限りの解決策であり、キューが完了すると、順序(最初にキューを作成したため)はなくなります。

だから、私は知りたいのですが、これに対する回避策や解決策はありますか?もしそうなら、それは私たちの要件に依存しますか?クリックイベントを処理したり、ajaxを使用してロードを介して非同期データをロードしたりしますか?

4

3 に答える 3

4

「を介して多くのイベントハンドラーを確立できることは知っています addEventListenerが、それらの実行順序は保証されていません。」

でバインドされたイベントハンドラーの実行順序は保証されませんが、jQueryでバインドされたイベントハンドラーaddEventListener()の実行順序は確実に保証されます。jQueryは、バインドされたのと同じ順序でハンドラーを呼び出します。

これは、jQueryドキュメントの巨大な太字のテキストではあまり明確にされていませんが、十分によく見るとそこにあります.on()メソッドdocoから:

(要素にバインドされたイベントハンドラーは、バインドされたのと同じ順序で呼び出されます。)

またはメソッドからより詳細に.bind()

イベントが要素に到達すると、その要素のそのイベントタイプにバインドされているすべてのハンドラーが起動されます。複数のハンドラーが登録されている場合、それらは常にバインドされた順序で実行されます。すべてのハンドラーが実行された後、イベントは通常のイベント伝播パスに沿って続行されます。

于 2012-08-12T07:44:10.073 に答える
0

コールバック関数を使用して、これらの関数でイベントを処理できます。

function helloWorld(hello,callback)
{
   //does something here with hello 
   callback(); //calls the callback function for final execution
}

helloWorld("world",alertUser);

function alertUser(){
  alert("I am done with this function");
}

ですから、あなたの質問を理解できれば、上記のようなことをします。

于 2012-08-12T07:39:36.220 に答える
0

特定の順序で実行するコードが必要な場合、なぜ複数のイベントハンドラーを使用するのですか?

複数の関数呼び出しを希望の順序で実行する1つのイベントハンドラーを使用すると、通常、はるかに保守しやすくわかりやすいコードになります。

于 2012-08-12T07:56:57.503 に答える