【问题标题】:Simulate an inline onkeydown event模拟内联 onkeydown 事件
【发布时间】:2018-04-27 17:23:54
【问题描述】:

我有一个我无法控制的输入元素 例如:

<input tabindex="2" onkeypress="if(NotReady_Key())return;fnKeyPressNum(this,'N',0);"onkeydown="if(NotReady_Key())return;fnKeyDownNum(this,9,0);" id="someElement"/>

在 internet explorer 8 和 9 中,我试图找到一种方法来使元素表现得就像在输入时按下了“输入”按钮一样,

没找到模拟压机的JS方式

但我在想,是否可以抓取内联方法:

onkeydown="if(NotReady_Key())return;fnKeyDownNum(this,9,0);"

从元素中,通过elementById获取元素, 并像事件实际发生一样执行它? 这是我到目前为止尝试过的(我正在使用 jquery):

 //get dom element
var element = $("#someElement")[0];
//simulate the event
//insert element as "this"
(function(){
fnKeyDownNum(this,9,0);
}).call(element);

但它似乎没有按预期工作,我是不是忘记了什么? 我认为我还需要确保模拟除此之外的其他系统变量,以完全模拟“ENTER”事件。

我能做什么?

选项 2 当然是在输入端模拟真正的“ENTER”按键,但到目前为止我未能在 IE8/9 中找到这样做的方法,如果那样的话,即使使用 VBS 也可以接受任何方法一个选项。

请注意,我特别需要 IE8 和 IE9 支持。

【问题讨论】:

    标签: javascript input internet-explorer-8 internet-explorer-9 keydown


    【解决方案1】:

    如果你只需要用一个元素调用 fnKeyDownNum,试试这个:

    fnKeyDownNum(document.getElementById('someElement'),9,0);
    

    但是如果您需要真正模拟按键(因为按键可以向字段添加输入,并且如果您在表单元素上按 Enter 也具有提交表单的效果),您将不得不单独管理它.

    【讨论】:

    • 嗨,詹姆斯,如果您查看我在问题中提供的示例,我已经尝试过与您的建议类似的方法,但相反,使用 dom 中的元素模拟了整个“this”(就像您所做的那样通过 getElementById)。谢谢。
    • 是的,仔细检查后,您使用的代码会做同样的事情——您能详细说明它现在在做什么和应该做什么吗? “没有按预期工作”不够清楚。干杯。
    • 经过检查,我注意到“this”旁边还有另一个“系统变量”,称为“event”,fnKeyDownNum 中的代码 excpects event var key = event.keyCode; ,所以我想我也需要模拟这个“事件”变量,但我不确定如何通过“调用”方法来完成。
    • 如果您触发“假”事件,它可能会起作用。试试这个:$('#someElement').triggerHandler({type: 'keypress', which: 13, keyCode: 13, key: "Enter" }); 你可能需要为 keydown 构建一个类似的东西,这取决于那些处理函数内部发生的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2019-12-21
    相关资源
    最近更新 更多