2011-09-21 15 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

相关问题