我有一个匿名函数处理一组单选按钮上的单击事件后的过程。
在此函数中,会发生一些动画,我希望禁用click事件,直到函数结束,以防止它再次从函数内触发。
该函数调用每个单选按钮共有的类名:
$(".question1").click( function(){
如何在函数执行任何动画时禁用此类元素上的任何进一步点击事件,并在完成后恢复它?
我已经尝试使用removeClass()和addClass()来实现这一点,但它似乎不能在函数中运行。
我也尝试过.off()和.on()没有运气。
单选按钮本身在函数内被禁用,但由于在类名上调用了该函数,因此单击事件仍然会触发。
非常感谢。
答案 0 :(得分:0)
我会选择其他路线,如果元素正在动画中,我会检查点击处理程序,在这种情况下只返回,因为你必须使用:animated选择器,如下所示:
$(".question1").click( function(){
if ( $('#element').is(':animated') ) {
return;
}
//rest of code
});
答案 1 :(得分:0)
您可以禁用单击按钮,然后在动画完成后重新启用它。
$(".question1").click( function(){
var that = this;
$(this).attr('disabled','disabled');
$('.anim_div').animate({
opacity: 0.25,
left: '+=50',
height: 'toggle'
}, 5000, function() {
$(that).attr('disabled',false);
});
});
http://api.jquery.com/animate/
对于多个动画,您可以考虑使用延迟来检测所有动画何时完成。
答案 2 :(得分:0)
一定是错的......开/关功能效果很好,也是类选择器。
你能放一些代码吗?作为一个小提琴,我们可以尝试帮助。
如果你不能给我们代码,我会尝试:
// triggered only if the class is not disable
$(".question1:not(:disabled)").on('click', function(){
// do something...
});
或强>
function theClick(){
$(".question1").on('click', function(){
// do something...
});
}
function theAnimation(){
$("#someId").on('click', function(){
$(".question1").off('click'); // disable the click
// do some animation
// do more...
// and more...
theClick(); // finish, so re-enable
});
}