当前位置: 首页 > 面试题库 >

Chrome中的Keydown Simulation正常启动,但键不正确

索曾琪
2023-03-14
问题内容

我想在html页面中的给定textarea元素上模拟keydown事件。由于我使用的是chrome,因此我调用initKeyboardEvent了变量,然后将要键入的keyCode传递到了textarea中。这是我尝试过的:

var keyEvent = document.createEvent('KeyboardEvent');
keyEvent.initKeyboardEvent('keydown', true, false, null, 0, false, 0, false, 77, 0);
inputNode.dispatchEvent(keyEvent);

在这段代码中,我输入字母,m但是textarea只得到keyCode
13,这是Enter关键。因此,我尝试了在线看到的覆盖代码,该代码将值设置为keyCodeVal,但没有成功

var keyEvent = document.createEvent('KeyboardEvent');
Object.defineProperty(keyEvent, 'keyCode', { 
                         get : function() {
                                 return this.keyCodeVal;
                         }
                        });
keyEvent.initKeyboardEvent('keydown', true, false, null, 0, false, 0, false, 77, 0);
keyEvent.keyCodeVal = 77;
inputNode.dispatchEvent(keyEvent);

有谁知道如何设置keyCode值?


问题答案:

非常非常接近…

您只需要覆盖’which’属性。这是一些示例代码:

Podium = {};
Podium.keydown = function(k) {
    var oEvent = document.createEvent('KeyboardEvent');

    // Chromium Hack
    Object.defineProperty(oEvent, 'keyCode', {
                get : function() {
                    return this.keyCodeVal;
                }
    });     
    Object.defineProperty(oEvent, 'which', {
                get : function() {
                    return this.keyCodeVal;
                }
    });

    if (oEvent.initKeyboardEvent) {
        oEvent.initKeyboardEvent("keydown", true, true, document.defaultView, false, false, false, false, k, k);
    } else {
        oEvent.initKeyEvent("keydown", true, true, document.defaultView, false, false, false, false, k, 0);
    }

    oEvent.keyCodeVal = k;

    if (oEvent.keyCode !== k) {
        alert("keyCode mismatch " + oEvent.keyCode + "(" + oEvent.which + ")");
    }

    document.dispatchEvent(oEvent);
}

用法示例:

Podium.keydown(65);

注意:此代码不适用于IE,Safari或其他浏览器。好吧,也许使用Firefox。YMMV。



 类似资料:
  • 所以Eclipse正在工作windows安装了一些更新并重新启动了我的计算机,然后突然eclipse不工作了。我已经用它做了一些尝试,我的java类路径是正确的,我相信但是eclipse仍然只会显示启动屏幕,然后立即关闭。 除非我使用-debug-consoleLog标记运行它,否则它似乎工作正常。你知道怎么解决这个问题吗? 编辑: 所以当我用调试控制台日志标签启动它时,日志是这样写的 这是我的日

  • 我正在尝试以伪分布式模式安装Hadoop2.2.0。当我试图启动datanode服务时,它显示了以下错误,有人能告诉我如何解决这个问题吗?

  • 我可以在下面/上面的代码帮助下启动Chrome浏览器的空窗口,但他们是一些错误,我得到了

  • 我按照 Okta 的在 Okta 中设置 SAML 应用程序文档(包括对本问题中讨论的 FirstName 和 LastName 属性的调整)进行了操作,并按照 Okta 的“PySAML2”页面(对于第三个链接没有足够的信誉)运行使用 Okta 进行身份验证的 Flask 应用程序。 运行 Flask 应用(对 'example-okta-com' URL 进行了适当的设置更改)时,IdP 启动

  • 我有一个对soap Web服务的请求,该服务在SoapUi中运行良好。我想在python脚本中调用此Web服务。 我尝试了一些模块:zeep,泡沫,...但是我总是有一个SSL错误。 以下是信息: https://37.71XXXXXXACONYX?wsdl 基本认证:用户名密码 身份验证类型:抢占式 我在SoapUi中提供了xml。 有人有什么想法吗? 谢谢!! 我试过:

  • 我是Spring云和Spring后端开发的新手。我正在尝试用SpringCloudGateway开发一个简单的微服务。 Github链接到Discovery Server、Spring Cloud Api网关和用户微服务。令人惊讶的是,当我在Postman中执行API时,GET API起作用,但POST却不起作用。 我试着调试,但它并没有传到我的控制器上。我错过了什么?还是做错了?任何帮助或建议都