启动/停止按键事件 jquery

Start / Stop keypress event jquery

我有问题。我想在按下 space 时停止按键事件,然后我想做一些事情,最后我需要 "restart" 这个功能。有可能吗?我该怎么做?

提前致谢

$(document).keypress(function(e) {
     if(e.keyCode == 32)
          // stop keypress function
          // do something
          // restart keypress function
}

尝试以下功能之一:

e.stopPropagation();

e.preventDefault();

完整代码:

$(document).keypress(function(e) {
  if (e.keyCode == 32) {
    e.preventDefault(); // e.stopPropagation();
  }
})

我相信你有两个选择。

禁用处理程序:

$(document).on('keypress', function keypressHandler(e) {
    //disable handler
    $(document).off('keypress');

    //do stuff

    //enable keypress handler
    $(document).on('keypress', keypressHandler);    
});

使用标志:

var keyHandlerActive = true;
$(document).on('keypress', function(e) {
    if (!keyHandlerActive) { return; }
    keyHandlerActive = false;

    //do stuff

    keyHandlerActive = true;    
});

嗯,你可以像这样玩,因为我为这两种情况添加了两个按钮,默认情况下 SPACE 将被禁用。请查看:

HTML

<input id="myinput" type="text">
<input id="space_flag" type="hidden" value="0">
<br/>
<input id="enable_space" type="button" value="Enable Space">
<br/>
<input id="disable_space" type="button" value="Disable Space">

JQuery

$(function(){
    $("#myinput").keypress(function(event){        
        if(event.keyCode == 32 && $("#space_flag").val()==0){
            return false;        
        }
    });

    $("#enable_space").click(function(event){
        $("#space_flag").val(1);
    });

    $("#disable_space").click(function(event){
        $("#space_flag").val(0);
    });
});

工作示例http://jsfiddle.net/1pn4cLak/

你的关闭条件是space,但是没有提到重新开启的条件..所以我在下面使用了一个计时器..你可以随意改变它

要试用演示,

  1. 键入除 space 以外的任意键以查看它是否被记录
  2. 按 space 关闭 10 秒(或更改代码使其直到进程完成)
  3. 功能在 10 秒后开启

当按下 space 时,该功能将关闭(逻辑关闭,因为 bind/rebind 如果过度使用可能会变得很痛苦)10 秒。

var logicalOff = false;
$(document).keypress(function(e) {
     if (logicalOff) { return true; } //well we just ignore and return until turned On
     $('div').text(e.which);
     if(e.which == 32) {
       logicalOff = true; // stop keypress function
       setTimeout(function () { // restart keypress function
         logicalOff = false;
         $('div').text("turned on now");
       }, 10000);          
       $('div').text("turned off for 10 seconds");
     }     
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>