2011-09-21 12 views
1

好吧,我只是要求解除特定的按鍵事件。我現在用命名空間事件解決了這個問題。但是我又遇到了另外一個問題......在animate()顯示div後,下面的函數綁定一個按鍵事件。它運行良好,但按鍵事件似乎計時,功能執行......在我的情況下,myFnc()執行時單擊鏈接...所以當我點擊鏈接keypress.f事件被觸發一次...但是當我按下按鍵之前多次點擊鏈接時,按鍵事件也會執行多次,儘管我只按了一次按鍵....所以fadeToggle()會在一次按鍵時執行5次,當通過五次點擊執行5次函數時......有人明白我的意思,並可以幫助我嗎?jQuery:在某些動作中綁定導致多重執行

function myFnc() { 
     $('#somediv').animate({  
      height: 'toggle'    
     }, 600, function() { 

      $(document).bind('keypress.f', function(event) { 

       if($('#secret').is(':visible')) { 

        if (event.which == 102) { 
         $('.content-2').fadeToggle(); 
         $('.content-284').fadeToggle(); 
        } 
       } 
       else {       
        $(document).unbind('keypress.f');       
       } 
      }); 

     }); 

} 

回答

0

使用.is() method:animated selector如果當前沒有進展,只適用於動畫..(問題是否多次點擊,而動畫正在進行

function myFnc() { 
    var $somediv = $('#somediv'); 
    if (!$somediv.is(':animated')) { 
     $somediv.animate({ 
      height: 'toggle' 
     }, 600, function() { 

      $(document).bind('keypress.f', function(event) { 

       if ($('#secret').is(':visible')) { 

        if (event.which == 102) { 
         $('.content-2').fadeToggle(); 
         $('.content-284').fadeToggle(); 
        } 
       } 
       else { 
        $(document).unbind('keypress.f'); 
       } 
      }); 

     }); 
    } 
} 

另一種解決方案是在綁定新鍵之前始終解除綁定。

$(document).unbind('keypress.f'); 
$(document).bind('keypress.f', function(event) {...}); 

這樣,它永遠只是一個..

0

你可以用一些解決這個像

var bound_keypress_f = false; 

function myFnc() { 
     $('#somediv').animate({  
      height: 'toggle'    
     }, 600, function() { 
      if (!bound_keypress_f) { 
       $(document).bind('keypress.f', function(event) { 

        if($('#secret').is(':visible')) { 
         if (event.which == 102) { 
          $('.content-2').fadeToggle(); 
          $('.content-284').fadeToggle(); 
         } 

         bound_keypress_f = true; 
        } 
        else {       
         $(document).unbind('keypress.f');       

         bound_keypress_f = false; 
        } 
       }); 
      } 
     }); 
} 
0

要綁定5個keypress.f事件(一個你點擊鏈接每一次被綁定) 。您可以通過幾種不同的方式解決此問題:

1)在綁定keypress.f事件之前解除所有keypress.f事件。

2)在頁面加載時綁定keypress.f事件,並將if(flag)添加到函數的開頭。每當鏈接被點擊時,將標誌設置爲true。如果您不想讓keypress.f激發該功能,請將該標誌設置爲false。

+0

您的第一個解決方案效果很好......謝謝! (沒有嘗試其他) – Mikaelik

相關問題