bind()次のように、jQuery を使用して、イベントをアタッチする HTML ボタンがあります。
$('#mybutton').bind('click', myFirstHandlerFunction);
ではmyFirstHandlerFunction、このハンドラーを次のように新しいハンドラーに置き換えたいと思いmySecondHandlerFunctionます。
function myFirstHandlerFunction(e) {
$(this).unbind('click', myFirstHandlerFunction).bind('click', mySecondHandlerFunction);
}
2 番目のクリック ハンドラーではmySecondHandlerFunction、ボタンを元の状態に切り替えたいと思います。次のように、ハンドラーをアンバインドし、mySecondHandlerFunction元のハンドラーを再アタッチしmyFirstHandlerFunctionます。
function mySecondHandlerFunction(e) {
$(this).unbind('click', mySecondHandlerFunction).bind('click', myFirstHandlerFunction);
}
これはうまく機能しますが、細かい点が 1 つあります。クリック イベントはボタンの各クリック ハンドラーを介してまだ伝播されていないため、クリック イベントはボタンの次のクリック ハンドラーに渡されます。前のハンドラー。mySecondHandlerFunctionが実行された直後に最終結果が実行されてmyFirstHandlerFunctionいます。
この問題は、各ハンドラーを呼び出すことで簡単に解決できますe.stopPropagation()が、これには、個別にアタッチされている可能性のある他のクリック ハンドラーがキャンセルされるというマイナスの副作用があります。
クリック イベントの伝播を停止することなく、2 つのクリック ハンドラーを安全かつ一貫して切り替える方法はありますか?