jQuery$(document).keydown()问题

jQuery$(document).keydown()问题,jquery,google-chrome,Jquery,Google Chrome,我目前正在开发一个需要标准桌面应用程序菜单栏的web应用程序。我已经开始在菜单栏上工作,并对布局进行排序 不幸的是,客户端希望访问键(如Alt+F)加载“文件”菜单。按下Alt键时,我想显示访问键。我目前有以下jQuery代码来处理此问题: $(document).ready(function() { $(this).keydown(function(e) { if(e.keyCode == 18) { alt_shifter = true; $('.access_key

我目前正在开发一个需要标准桌面应用程序菜单栏的web应用程序。我已经开始在菜单栏上工作,并对布局进行排序

不幸的是,客户端希望访问键(如Alt+F)加载“文件”菜单。按下Alt键时,我想显示访问键。我目前有以下jQuery代码来处理此问题:

$(document).ready(function() {
    $(this).keydown(function(e) {
        if(e.keyCode == 18) { alt_shifter = true; $('.access_key').css({ textDecoration: 'underline' }); }
    });

    $(this).keyup(function(e) {
        if(e.keyCode == 18) { alt_shifter = false; $('.access_key').css({ textDecoration: 'none' }); }
    });
});
不幸的是,正如您将在JSFIDLE上看到的,出于某些原因,在Google Chrome中,当按下Alt键时,这些键会带下划线,然后在keyup上正常化。但是,再次按下Alt键不会产生任何效果,直到下次按下Alt键。这几乎就好像一旦下划线完成并触发了
keyup
,它就不会注册keyup,直到再次按下它

下面是JSFIDLE演示>


我们将非常感激您的任何帮助

我修改了代码以包含e.preventDefault()就在键码检查之前,它似乎起作用了。以下是帮助我找到答案的网站

试试这个:


使用
e.preventDefault()为我工作。

这是您最新的小提琴:

通过添加
e.preventDefault()
解决了这个可爱的问题。如果我不得不猜测的话,那是因为ALT键也被浏览器本身捕获,并显示其自己的高亮菜单

$(document).ready(function() {
    $(this).keydown(function(e) {
        e.preventDefault();
        if(e.keyCode == 18) { alt_shifter = true; $('.access_key').css({ textDecoration: 'underline' }); }
    });

    $(this).keyup(function(e) {
        e.preventDefault();
        if(e.keyCode == 18) { alt_shifter = false; $('.access_key').css({ textDecoration: 'none' }); }
    });
});

它对我有效-每次按下和释放ALT时下划线都会打开和关闭。MacOS 10.7上的Chrome 13.0.782.220。1@Alnitak-奇怪,在Windows 7下的同一版本的Chrome上,它对我不起作用。Windows上的13.0.782.220似乎有问题。是的,请尝试此处。问题存在。我同意。每隔按一次
alt
键,不会触发
keydown
事件。我试过的所有其他钥匙都能正常工作。