在jQuery中阅读按键

时间:2014-08-28 06:24:44

标签: javascript jquery

我目前正在学习Codecademy上的基本jQuery,第12/12课提供了一些代码而没有解释:

$(document).ready(function() {
    $(document).keydown(function(key) {
        switch(parseInt(key.which,10)) {
            // Left arrow key pressed
            case 37:
                $('img').animate({left: "-=10px"}, 0);
                break;

...

我了解在按下任意键时会调用keydown,但我不明白为什么需要在key中包含参数function()。直到这一刻,我总是把它留空。

我理解key.which是指用户按下的键(至少根据w3schools),但如果是,为什么我需要key中的function()参数?在代码中的哪一点是用户的按键实际记录了什么?

谷歌搜索产生了event.which的jQuery API,我真的无法理解..

另外,这与上述问题无关,但是:

编译器如何检查输入,是否将某些事件优先于其他事件?它是否每秒多次通过整个程序?编译器需要检查许多事件的非常大的程序会发生什么?例如,如果我在第123125行的div上有一个click事件,而第20行的hover事件是同一个div,我将鼠标悬停然后快速连续点击该div,编译器会及时读取这两个事件吗?

2 个答案:

答案 0 :(得分:2)

当发生任何事件时,JavaScript将查找与特定事件匹配的所有事件处理程序。

JavaScript拥有多种类型的事件,click,mousedown,keydown,input,onsubmit等。

当发生具有已注册处理程序的事件时,JavaScript会将有关该事件的所有信息捆绑到单个 Event 对象,并且将其传递给处理函数< / em>作为第一个参数。

请注意,这是 JavaScript对象,而不是jQuery版本。

如果你不需要,JavaScript允许你默默地省略参数。


KeyboardEvent 对象是原始Event对象的扩展,包含.which属性,其中包含按下的键的键代码。

答案 1 :(得分:1)

有一些东西,比如Jquery提供的重载....

表示如果您的代码不需要有关按下的键的信息...您只是希望收到有关按键事件的通知...在这种情况下,您将不会使用&#34; key&#34;在参数如:

$(document).keydown(function() {});

但是如果你想知道按下了哪个键,那么你将不得不使用&#34; key&#34;在参数如:

 $(document).keydown(function(key) {

Jquery会在后面处理这个......

无论您注册多少活动,您的表现都不会受到影响。

就序列而言,任何事件都不会重叠任何事件,事件触发的顺序是预定义的。