启用和禁用onkeydown事件?

时间:2017-07-05 20:12:41

标签: javascript ajax event-handling keydown

嗨我正在尝试启动键启用,然后一旦单击按钮以禁用事件,这到目前为止工作正常,然后一旦按下关闭按钮我想再次启用事件这部分没有&#39工作我想用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;
    }
};

亲切的问候

4 个答案:

答案 0 :(得分:1)

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

addItemToBuyCart()

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

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

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

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

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

答案 1 :(得分:1)

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

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这是没有意义的。

答案 2 :(得分:1)

单击关闭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>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

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

同时查看此问题:

bind and unbind event in jquery