首先,您附加事件的方式被破坏了。我不知道这是否只是匆忙提出问题或代码中的真正错误,但这是设置处理程序的正确方法:
$("#button").click(function(evt) { // <- you need to pass it a function!
$(this).unbind('click').next()
.toggle("slow",function(){$('#button').bind('click')});
});
但是到你的问题上。我认为你会从使用jQuery 的one
function中受益。一旦点击处理程序被调用,它就会作为点击处理程序被移除;因此,它只执行一次,单击一次。要在动画之后重新打开点击处理程序,我认为你做对了;动画结束后重新绑定。
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;
}