在Jquery中检测双重退格事件

时间:2012-04-13 14:12:57

标签: jquery

我知道我可以检测到这样的单个退格按键:

$("#myelement").bind ("keyup", function(event) {
    if (event.keyCode==8) {
        alert ("Backspaced!!!");
    }
});

如何在1秒内检测到发生的双退格,就像双击一样?

3 个答案:

答案 0 :(得分:1)

您必须跟踪上次按下退格键的时间。然后,每次调用事件处理程序时,检查该值并查看它是否小于1秒,如果是,则按下双退格键。如果没有,则将最后退格时间的值重置为当前时间,并且不执行任何代码。

伪代码中的

last_timestamp = 0
onkeyup () {
  if key == backspace {
    if now () - last_timestamp <= 1 {
      // execute code
      last_timestamp = 0
    }
    else {
      last_timestamp = now ()
    }
  }
}

答案 1 :(得分:1)

在jQuery.com本身,在他们的custom.js文件中,有一些代码可能对你有所帮助。它在用户击键中侦听“konami”代码。如果它检测到某个键序列,如变量konami中所示,则会响应。

// Hehe.
if (window.addEventListener) {
  var kkeys = [], konami = "38,38,40,40,37,39,37,39,66,65";
  window.addEventListener("keydown", function(e) {
    kkeys.push(e.keyCode);
    if (kkeys.toString().indexOf(konami) >= 0) 
      window.location = "http://ejohn.org/apps/hero/";
  }, true);
}

此代码不执行的操作是跟踪最后一次按键和当前按键之间的时间。但请注意,通过一些细微的修改,我们可以模仿他们的代码并生成您想要的所需输出。

<script>
  (function($){
    // Prep our variables
    var keys = [], lastEntry = 0, seq = '8,8';
    // Listen for keydown events
    $(document).keydown(function(e){
      // Push new key into keys array
      keys.push(e.which);
      // See if we need to respond
      if ( keys.toString().indexOf(seq) != -1 )
        if ( e.timeStamp - lastEntry <= 1000 )
          console.log( 'Correct keys, in the current time.' );
      // Update time of last keydown
      lastEntry = e.timeStamp;
    });
  })(jQuery);
</script>

答案 2 :(得分:0)

var flag=false;
$("#myelement").on("keyup", function(e) {
    if ((e.keyCode ? e.keyCode : e.which) == 8) {
        setTimeout(function() {flag=false}, 1000);
        if (flag) {
            flag=false;
            alert('backspace twice');
        }
        flag=true;
    }else{
        flag=false;
    }
});​

FIDDLE