要素にクリック イベント ハンドラーを追加する
$(".elem").click(function(){
$.post("page.php".function(){
//code1
})
})
そして、クリックイベントをトリガーします
$(".elem").click();
//code2
code1 の実行後に code2 が実行されるようにするにはどうすればよいですか
要素にクリック イベント ハンドラーを追加する
$(".elem").click(function(){
$.post("page.php".function(){
//code1
})
})
そして、クリックイベントをトリガーします
$(".elem").click();
//code2
code1 の実行後に code2 が実行されるようにするにはどうすればよいですか
(WebWorkers を無視) JavaScript は単一のスレッドで実行されるため、常に code1 の後に code2 が実行されることを確認できます。
コード 1 が Ajax 呼び出しや のような非同期処理を行わない限りsetTimeout()
、トリガーされたクリック ハンドラーが完了すると、コード 2 が実行され、(最終的に) Ajax 呼び出し (または など) からのコールバックsetTimeout()
が実行されます。
編集:更新された質問については、上記で述べたように、非同期 Ajax コールバックが後で発生するため、code2 は常に code1 の前に実行されます (Ajax 応答が非常に高速であっても、現在の JS が終了するまでコールバックは呼び出されません)。
「code1 の実行後に code2 が実行されるようにする方法」
.click()
params なしで使用すると へのショートカットになり.trigger("click")
ますが、実際に.trigger()
明示的に呼び出す場合は、ハンドラーに渡される追加のパラメーターを指定できます。これにより、次のことが可能になります。
$(".elem").click(function(e, callback) {
$.post("page.php".function(){
//code1
if (typeof callback === "function")
callback();
});
});
$(".elem").trigger("click", function() {
// code 2 here
});
つまり、クリック ハンドラー内で、関数がcallback
パラメーターに渡されているかどうかをテストし、渡されている場合はそれを呼び出します。つまり、イベントが「自然に」発生した場合、コールバックはありませんが、プログラムでトリガーして関数を渡すと、その関数が実行されます。(渡すパラメーター.trigger()
は関数である必要はありません。任意の型のデータにすることができ、複数のパラメーターを渡すことができますが、この目的のためには関数が必要です。詳細については、.trigger()
ドキュメントを参照してください。)
このように書いてみることができます:
$(".elem").live("click", function(){
//code1
})
// for newer jquery version from 1.9
$(".elem").on("click", function(){
//code1
})
そして、トリガーは常に起動されたとおりに実行されます。
メソッドをラップcode2
し、コールバックとして内部に追加して、実行code1
後に常に呼び出されるようにしますcode1
code2 = function(){/*code2*/};
$(".elem").click(function(){
//code1
code2();
})
Javascriptの実行は1行ずつです。したがって、発生したものはすべて、最初に実行されます。したがって、他の方法が機能する前にクリックコードを追加します。
さらに、非同期呼び出しがある場合は、応答を受け取ったときにのみ設定されるフラグを取ります。
var clicked = false; $('#elem')。click(function(){//非同期プロセスを実行しますclicked = true;});
while(!clicked){//何もしない}
//呼び出される他の関数
または、postメソッドを使用する場合、2番目のオプションはプロパティでasync=trueを設定します。