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 つのクリック ハンドラーを安全かつ一貫して切り替える方法はありますか?