2012-10-11 47 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

在第一次點擊,你可以簡單地添加一個類你容器標籤說一個按鈕已被點擊。在隨後的點擊中,在調用動畫之前檢查容器是否具有該類。