Javascript-特定于触发器的键盘键

Javascript-特定于触发器的键盘键,javascript,events,triggers,keyboard,Javascript,Events,Triggers,Keyboard,我有一段代码: window.addEventListener('keydown', function (e) { console.log(e.which); console.log(e.keyCode); }); var evObj = new KeyboardEvent('keydown', {key:65}); window.dispatchEvent(evObj); 为什么我在控制台中看到0而不是65 还有e.keyCode和e.keyCode都是0而不是65,

我有一段代码:

window.addEventListener('keydown', function (e) { 
   console.log(e.which); 
   console.log(e.keyCode); 
});

 var evObj = new KeyboardEvent('keydown', {key:65});
 window.dispatchEvent(evObj);
为什么我在控制台中看到0而不是65

还有e.keyCode和e.keyCode都是0而不是65,我使用的是Chrome的最新版本

多谢各位

还有e.keyCode和e.keyCode都是0而不是65,我使用的是Chrome的最新版本

因为您设置的是
,而不是
哪个
<代码>键是键的表示,而不是键代码。要初始化
keyCode
和/或
哪个
,您应该…这样做(请参阅)

下面是一个例子,但它在Chrome中似乎不起作用(仍然得到
0
)-这是Chrome的一个bug,下面是解决方法。它在Firefox中工作。在IE11中失败,因为IE11不喜欢新键盘事件

window.addEventListener(“向下键”,函数(e){
log(“keyCode=“+e.keyCode+”,which=“+e.which”);
},假);
setTimeout(函数(){
var evObj=newkeyboardevent('keydown',{keyCode:65,which:65});
log(“发送事件”);
窗口调度事件(evObj);
}, 300);

注意:在Firefox中,
keyCode
属性对
onkeypress
事件不起作用(只返回0)。对于跨浏览器解决方案,请将
which
属性与
keyCode
一起使用,例如:


var x=event.which | | event.keyCode;//使用which或keyCode,具体取决于浏览器支持
chrome中存在缺陷,
keyCode
哪些
是不可配置的

可能的解决方法:定义自定义getter

window.addEventListener('keydown',函数(e){console.log(e.which);});
(功能(o,k){
//使用createEvent可获得更好的兼容性
var evObj=document.createEvent('HTMLEvents');
evObj.initEvent('keydown',true,false);
Object.defineProperty(evObj,'keyCode'{
get:function(){
返回k;
}
});
Object.defineProperty(evObj,“which”{
get:function(){
返回k;
}
});
o、 调度事件(evObj);

}(窗口,65);我需要它在Chrome上只有atmI试过google
javascript keyevent Chrome
,它应该是一个来自的bug。链接来自。如果你只需要Chrome,正如你在别处评论的那样,这是一个副本,它有一个有效的答案。
Object.defineProperty(evObj,“which”,{“value”:666})
将覆盖它作为一种解决方法。是的,刚刚找到了。但这是否意味着我触发了正确的指定键盘按钮!?这意味着您将使用
,该
/
键代码
-事件的属性将返回所需的值(65)@Dr.Molle,但除此之外,我需要它来真正触发键…:DIt确实会触发事件,只要“trigger”意味着监听器将被执行(否则您将无法在控制台中看到65)。当你想要类似的东西时,这是一个完全不同的问题。@T.J.Crowder非常感谢你!我不应该接受莫勒博士的回答吗?@sbaaang:不管你喜欢哪一个,完全取决于你。以上不是从莫勒博士的回答中得出的。它是从其他地方衍生出来的。(我在寻找Chrome不工作的原因时发现了它。)
var evObj = new KeyboardEvent('keydown', {keyCode:65, which:65});