【问题标题】:how to set keycode value while triggering keypress event manually in pure javascript?如何在纯javascript中手动触发按键事件时设置键码值?
【发布时间】:2016-06-03 03:50:17
【问题描述】:

我是 Javascript 的新手,虽然我很好地使用了 JQuery。但我找不到更好的文档来执行此操作。只有当我按下回车键时才需要触发点击事件。所以我需要为这个场景编写测试用例。

function btnRepeatKeyDownEvent(e){
        if (e.keyCode === 13) {
            this.trigger('click', e);
        }
}

到目前为止,我已经找到了这个解决方案。

let keyboardEvent: KeyboardEvent = new KeyboardEvent('keypress', {'key': 'Enter'});
document.dispatchEvent(keyboardEvent);

但上面的代码总是将 keycode 值设为 0。我更厌倦了寻找解决方案。根据 MDN,大多数功能都已弃用。 我需要使这个测试用例在 chrome、firefox 和 IE11+ 中可用,但不适用于旧浏览器。请帮助我。

【问题讨论】:

    标签: javascript keypress keyboard-events


    【解决方案1】:

    keyCode 和其他属性是只读的。因此,您可以利用 JavaScript 的 Object.defineProperties 函数来伪造它,该函数会覆盖值:

    function makeKeyPressEvent(keyName, keyCode, charCode){
        var event = new KeyboardEvent('keypress');
        Object.defineProperties(event, {
            charCode: {value: charCode},
            keyCode: {value: keyCode},
            keyIdentifier: {value: keyName},
            which: {value: keyCode}
        });
        return event;
    }
    

    这里是如何使用它:

    window.addEventListener('keypress', function(event){console.log('key pressed!', event.keyIdentifier, event.keyCode, event.charCode, event)}, true);
    
    var enterKeyEvent = makeKeyPressEvent('Enter', 13, 13);
    
    window.dispatchEvent(enterKeyEvent);
    

    【讨论】:

    • TypeError: Attempting to change access mechanism for an unconfigurable property in phantomJs -- :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多