繁体   English   中英

启用和禁用onkeydown事件?

[英]Enable and disable onkeydown event?

嗨我想尝试启动键启用然后一旦单击一个按钮以禁用事件这到目前为止工作正常,然后一旦按下关闭按钮我想再次启用该事件这部分不起作用我' d喜欢用javascript解决这个问题,如果可能的话, 我的关闭按钮在另一个html(project1.html)文件中并通过Ajax加载这里是我的代码:

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;
    }
};

亲切的问候

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

$(".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/addEventListenerhttps://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> 

您可以使用标志变量或使用bind和unbind函数。

还要查看这个问题:

在jquery中绑定和取消绑定事件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM