javascript - 使用 `which` 属性以编程方式触发 keydown 事件

标签 javascript google-chrome dom-events keydown onkeydown

我如何以编程方式触发 Chrome 上的 keydown 事件,它将 which 属性设置为所需的值?

尝试过

new KeyboardEvent('keydown', {
    'which':65,
    'charCode':65,
    'keyCode':65,
    'key':"a",
    'code':"KeyA",
});

但是当在输入的 onKeyDown 处理程序中接收到该属性时,该事件的 which,charCode and keyCode 等于 0key 已正确设置为 a

最佳答案

在 Chrome 中,这些事件属性的默认值为 0 并且不可写(由于它们已被弃用)。您必须删除 native 属性,然后重新创建它们:

var ke = new KeyboardEvent('keydown', {
    'key':"a",
    'code':"KeyA",
});

// Delete native event read-only properties with default values of 0
delete ke.keyCode;
delete ke.charCode;
delete ke.which;

// Create new custom properties that are read/write:
Object.defineProperty(ke, "keyCode", {"value" : 65});
Object.defineProperty(ke, "charCode", {"value" : 65});
Object.defineProperty(ke, "which", {"value" : 65});

var el = document.getElementById("key");

el.addEventListener("keydown", function(evt){
  console.log(evt.key, evt.code, evt.keyCode, evt.charCode, evt.which);
});

el.dispatchEvent(ke);
<input type="text" id="key">

关于javascript - 使用 `which` 属性以编程方式触发 keydown 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47873783/

相关文章:

javascript - React Jest 示例不起作用

xml - XSL 浏览器问题

javascript - AutoFill chrome 扩展不更新 ng-model 值

javascript - 如何在 JavaScript 中修改 Event 对象的目标属性?

javascript - Titanium ios 选择器上的列未对齐

c# - 使用 MVC $.ajax() 一致地从 Controller 中的操作获取数据?

javascript - 'enter' 监听器未在 webkit 上触发(Chrome)

javascript - 文档的听众太多?

javascript - window.onready = function() 在 IE 中失败

javascript - 在 Cypress 中检查输入值是否小于 x 的正确方法是什么?