1

我知道我可以像这样检测一个退格键:

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

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

4

3 回答 3

1

您必须记录最后一次按下退格键的时间。然后每次调用您的事件处理程序时,您都会检查该值并查看它是否小于 1 秒,如果是,您会按两次退格键。如果不是,那么您将最后一个退格时间的值重置为当前时间,并且您不执行任何代码。

在伪代码中:

last_timestamp = 0
onkeyup () {
  if key == backspace {
    if now () - last_timestamp <= 1 {
      // execute code
      last_timestamp = 0
    }
    else {
      last_timestamp = now ()
    }
  }
}
于 2012-04-13T14:15:26.143 回答
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>
于 2012-04-13T14:16:47.157 回答
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;
    }
});​

小提琴

于 2012-04-13T14:23:44.187 回答