1

大家好,我有这个代码:

$('#riscButton, #eneButton, #giardButton').one("click", function(){
                $('.content').animate(
                    {"height":"+=620px"},
                    500,
                    'easeOutBounce');
                $('#eneButton').animate(
                    { "top":"+=310px"},
                    1500,
                    'easeInOutExpo');
                $('#eneButton').animate(
                    {"left":"-=310px"},
                    1500,
                    'easeOutBounce')
                $('#giardButton').animate(
                    {"top":"+=620px"},
                    2000,
                    'easeInOutExpo')
                });

如您所见,如果有人单击按钮,则必须发生动画,而单击哪个按钮具有相同的动画并不重要。使用 one() 我对必须单击一次的按钮说,这就是问题所在,我怎么能对脚本说如果你按下一个按钮,甚至其他按钮也必须在之后被禁用?现在,例如,如果我单击第一个按钮,动画就发生了,如果我重新单击同一个按钮,什么都没有发生,但是如果我单击第二个或第三个按钮,动画就会再次开始。我该如何解决?

4

3 回答 3

3

您必须从所有元素中取消绑定事件,而不仅仅是您单击的元素:

$('#a, #b, #c').click(function() {
    alert('clicked');

    $('#a, #b, #c').off('click');
});​

演示:http: //jsfiddle.net/peFff/3/


更好的解决方案是使用类:

$('.clickable').click(function() {
    alert('clicked');

    $('.clickable').off('click');
});​

演示:http: //jsfiddle.net/peFff/5/

于 2012-10-11T18:12:58.220 回答
0

使用选择器。例如:$('#riscButton, #eneButton, #giardButton').attr('disabled','disabled')在你的函数中。该选择器为您返回一个包含所有按钮的数组...然后您应该取消绑定按钮...通过执行$('#riscButton, #eneButton, #giardButton').off('click.button')

将 .button 添加到您的事件名称以命名它并使其更容易找到(它还将避免取消绑定不需要的事件处理程序)。

最后一点:最后,如果你必须做$('#a,#b,#c')一个选择器之类的事情,你应该考虑使用一个类来代替(只是让代码更好)

于 2012-10-11T18:09:30.680 回答
0

在第一次单击时,您可以简单地将一个类添加到您的容器标记中,说明一个按钮已被单击。在随后的点击中,在调用动画之前检查容器是否具有该类。

于 2012-10-11T18:12:32.280 回答