打破$(document).bind('keydown',function(e){});功能

时间:2013-02-21 04:14:00

标签: javascript jquery html keyboard

$(document).ready(function(){
    $(document).bind('keydown',function(e){
        key  = e.keyCode;
        if(key == 37){
            left();
        }else if(key == 38){
            up();
        }else if(key == 39){
            right();
        }else if(key == 40){
            down();
        }
    });
            alert("Hi");
});

“嗨”只会提醒一下我如何在$(document).bind开始后突破?可能是break;return;之类的东西?

2 个答案:

答案 0 :(得分:6)

“嗨”只提醒一次,因为它不在keydown处理程序中......它在ready处理程序中。

$(document).ready(function(){
    $(document).bind('keydown',function(e){
        key  = e.keyCode;
        if(key == 37){
            left();
        }else if(key == 38){
            up();
        }else if(key == 39){
            right();
        }else if(key == 40){
            down();
        }
    });// keydown handler ends here
            alert("Hi");
});

另外作为旁注,请尝试使用console方法而不是alert(),因为它可能更具描述性且无阻塞。

<强>更新

我可以从下面的评论中看到你对你的代码中实际发生的事情感到很困惑......所以让我们一步一步。

$(document).ready(function(){

在这里,您将处理程序绑定到DOM ready事件。当浏览器完成文档结构的构建时,这会被触发。它不会考虑任何需要加载的外部资产。

$(document).bind('keydown', function(e){

现在我们将处理程序绑定到keydown事件。当keydown事件冒泡到document级别时,函数内的任何内容(以及函数中的 )都将被执行。

key = e.keyCode;

您可以将事件的keyCode属性分配给key变量。我建议在其前面加上关键字var,以保持范围。 var key = e.keyCode;

if(key == 37){
    left();
}else if(key == 38){
    up();
}else if(key == 39){
    right();
}else if(key == 40){
     down();
}

现在,您正在浏览一系列if / else块,并呼叫leftuprightdown如果先前声明的key变量与您的某个条件匹配,则函数。

});

这是keydown处理程序的 END

alert("Hi");

在这里alert()发送一条消息。这是在keydown处理程序为BOUND之后直接完成的,但不是在每次执行或执行所述处理程序之后。该行作为文档ready处理程序的一部分执行ONCE。

});

这是文档ready处理程序的结尾。

答案 1 :(得分:0)

我想,你不想多次使用keydown

您可以使用onoff()之类的,

$(document).ready(function(){
    $(document).on('keydown',function(e){
        key  = e.keyCode;
        if(key == 37){
            left();
        }else if(key == 38){
            up();
        }else if(key == 39){
            right();
        }else if(key == 40){
            down();
        }
        $(document).off('keydown'); 
    });// keydown handler ends here
            alert("Hi");
});

或者你可以使用只发射一次的one()

$(document).ready(function(){
        $(document).one('keydown',function(e){
            key  = e.keyCode;
            if(key == 37){
                left();
            }else if(key == 38){
                up();
            }else if(key == 39){
                right();
            }else if(key == 40){
                down();
            }  
        });// keydown handler ends here
                alert("Hi");
    });