1

次の JQuery コードがあるとします。

$(document).bind('keyup', function(e) {    
    arrows=((e.which)||(e.keyCode));    
    switch (arrows){    
       case 37:
          executeMyfunction();     
          break;    
    }    
});

ユーザーが左矢印キー (37) を押したままにすると、executeMyfunction()が繰り返し呼び出されます。

どうすればこれを防ぐことができますか?

キーが離された場合にのみトリガーされると思いkeyupましたが、機能していません(そのためkeyup、 ;keydownも機能しません)。

4

2 に答える 2

1

イベントのバインドを解除する必要があると思います。であってはならないと思いますkeyupが、keypressまたはkeydown

おそらくこのようなものです。

$(document).bind('keydown', function(e) {    
    arrows=((e.which)||(e.keyCode));    
    switch (arrows){    
       case 37:    
          executeMyfunction();    
          $(document).unbind('keydown');    
          break;    
    }
});

keyupイベントを再度使用する場合は、関数を再バインドする必要があります。

$(document).bind('keyup', function(e) {        
    switch (arrows){    
      case 37:
         $(document).bind('keydown');
         break;
    }    
})

見てください: http://api.jquery.com/unbind/

于 2011-03-10T01:04:21.083 に答える
0

まあ、いつでも関数の呼び出しをデバウンスできます。つまり、イベントが短時間発生しなかった後に関数を呼び出す場合です。

于 2011-03-10T01:07:36.867 に答える