启用和禁用 onkeydown 事件?

Enable and disable onkeydown event?

您好,我正在尝试从启用键开始,然后单击按钮以禁用事件,到目前为止一切正常,然后一旦按下关闭按钮,我想再次启用事件这部分没有不行 如果可能我想使用 javascript 解决这个问题 我的关闭按钮在另一个 html (project1.html) 文件中并通过 [=19= 加载] 这是我的代码:

var enable_keydown = document.onkeydown;

$(".open-project").click(function(){
document.onkeydown = null;
});

$("#project_close").click(function(){
document.onkeydown = enable_keydown;
});


document.onkeydown = function(e) {
    switch (e.keyCode) {
        case 37:
             $.fn.fullpage.moveSectionUp();
            break;
        case 38:
             $.fn.fullpage.moveSectionUp();
            break;
        case 39:
             $.fn.fullpage.moveSectionDown();
            break;
        case 40:
             $.fn.fullpage.moveSectionDown();
            break;
    }
};

亲切的问候

您可以使用标志变量或使用绑定和解除绑定函数。

同时检查这个问题:

bind and unbind event in jquery

为此,我会将您的禁用处理程序更改为:

$(".open-project").click(function(){
  $(document).on('keydown', function(e) { e.preventDefault(); });
});

对于重新启用处理程序,请执行以下操作:

$("#project_close").click(function(){
  $(document).off('keydown');
});

on()函数绑定了keydown事件,基本上阻止了事件的发生,off()函数恢复了默认的keydown功能。您可以在此处参考这些功能的 jQuery 文档:

http://api.jquery.com/on/

http://api.jquery.com/off/

要删除事件侦听器,您的函数不能是匿名的,以便您以后可以引用它。所以定义你的函数:

function moveSection(e) {
    switch (e.keyCode) {
        case 37:
        case 38:
             $.fn.fullpage.moveSectionUp();
            break;
        case 39:
        case 40:
             $.fn.fullpage.moveSectionDown();
            break;
        default:
            break;
    }
}

将其添加到事件侦听器:

$(".open-project").click(function(){
    document.addEventListener('keydown', moveSection);
});

并删除它:

$("#project_close").click(function(){
    document.removeEventListener('keydown', moveSection);
});

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener and https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener

你在这里做什么

var enable_keydown = document.onkeydown;

$("#project_close").click(function(){
    document.onkeydown = enable_keydown;
});

归结为 document.onkeydown = document.onkeydown 这没有意义。

单击关闭 div 并分配 keydown 函数 单击打开从 document.onkeydown 中删除 keydown 函数。

function moveFunc(e) {
            alert(e.keyCode);
    };

$(".open-project").click(function(){
    document.onkeydown = null;
});

$("#project_close").click(function(){
    document.onkeydown = moveFunc;
});
.open-project{
  background-color: red;
  width: 150px;
  height: 150px;
  }
  
 #project_close{
  background-color: green;
  width: 150px;
  height: 150px;
  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="open-project" >open project</div>
<div id="project_close" >project close</div>