我目前正在开发一个需要标准桌面应用程序菜单栏的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' }); }
});
});
不幸的是,正如你在jsFiddle上看到的那样,出于某些原因,在谷歌浏览器中,当按下Alt键时,键被加下划线,然后在键盘上标准化。但是,再次按Alt不会执行任何操作,直到下次按下它为止。这几乎就像下划线已经完成并且keyup
被触发一样,它不会在再次按下之前注册该密钥。
这是jsFiddle演示> http://jsfiddle.net/Ht2wD/
非常感谢任何帮助!
答案 0 :(得分:5)
我在keyCode检查之前修改了代码以包含 e.preventDefault(); ,它似乎有效。这是帮助我得出答案http://unixpapa.com/js/key.html
的网站答案 1 :(得分:4)
试试这个:http://jsfiddle.net/Ht2wD/14/
使用e.preventDefault();
为我工作。
答案 2 :(得分:2)
这是您更新的小提琴:http://jsfiddle.net/Ht2wD/13/
通过添加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' }); }
});
});