まず、イベントを添付する方法が壊れています。急いで質問しただけなのか、コードの実際のエラーなのかはわかりませんが、ハンドラーを設定する正しい方法は次のとおりです。
$("#button").click(function(evt) { // <- you need to pass it a function!
$(this).unbind('click').next()
.toggle("slow",function(){$('#button').bind('click')});
});
しかし、あなたの問題に。jQuery のone
関数を使用することでメリットが得られると思います。クリック ハンドラーが呼び出されるとすぐに、クリック ハンドラーとして削除されます。したがって、1 回のクリックで1回だけ実行されます。アニメーションの後にクリック ハンドラーを元に戻す方法については、正しく理解できたと思います。アニメーションの終了後に再バインドします。
function clickHandler(evt) {
$(this).next().toggle("slow",
function() {
$('#button').bind('click', clickHandler);
});
}
$("#button").one('click', clickHandler);
使用one
が何らかの理由で遅すぎる場合、最速の方法はhref
、アンカーのすぐ上に JavaScript を追加することです。ただし、再度実行する準備が整ったら、グローバル ブール変数を切り替える必要があります。
<a href="javascript:clickHandler(); return false;">...</a>
function clickHandler() {
if( someBoolean ) {
someBoolean = false;
//do stuff
}
someBoolean = true;
}