2012-10-11 48 views
1

嗨,大家好我有这样的代码:jQuery的,乘选择和或功能

$('#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') 
       }); 

正如你可以看到,如果有人点击一个按钮动画有happend,并不重要,你点击你有相同的按钮动画。与一()我说的按钮,必须单击一次只有这里是问题,我怎么能说脚本,如果你按下一个按钮,即使其他人必须被禁用后?例如,如果我点击第一个按钮动画发生并确定,如果我重新点击相同的按钮什么都没有发生,但是如果我点击第二个或第三个按钮动画再次开始。我该如何解决它?

回答

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/

+0

我会做这种方式,而且还使用一类在每个按钮上的,而不是由他们的每一个ID的单独引用它们。 –

+0

只是给每个按钮需要一个类,例如[小提琴](http://jsfiddle.net/peFff/4/) – Jlange

+0

@TomPietrosanti:我将它编辑到我的答案*正确*当你评论。 – Blender

0

使用选择器。例如: 例如:$('#riscButton, #eneButton, #giardButton').attr('disabled','disabled')在您的功能。该选择将返回所有的按钮... 数组,然后你应该解除绑定按钮...做$('#riscButton, #eneButton, #giardButton').off('click.button')

.button你的事件名称添加到namespace并使其更容易找到(它会还避免解除不希望的事件处理程序的绑定)。

末注:最后,如果你不得不做的事情一样$('#a,#b,#c'),你应该考虑使用一个类,而不是一个选择器(只是使代码更漂亮)

0

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