【问题标题】:How can I generate a keyup event with a specific keycode in IE8?如何在 IE8 中生成带有特定键码的 keyup 事件?
【发布时间】:2011-11-23 00:53:14
【问题描述】:

我需要在 IE 8 中使用原生 DOM 函数(没有 jQuery)生成 keyup 事件。以下代码生成、触发和接收事件,但keyCode始终为0。如何正确传递keyCode?​​p>

<form><input id="me" type="submit" /></form>

<script type="text/javascript">
var me = document.getElementById("me");
me.attachEvent("onkeyup", function(e) {
  alert(e.keyCode); // => 0
});

document.getElementById("me").fireEvent('onkeyup', 13);
</script>

【问题讨论】:

    标签: javascript dom internet-explorer-8 dom-events keyboard-events


    【解决方案1】:

    想通了。解决方案是创建一个事件对象,分配键码,然后从节点触发它。

    var e = document.createEventObject("KeyboardEvent");
    e.keyCode = keyCode;
    
    node.fireEvent("onkeyup", e);
    

    【讨论】:

    • 太棒了,感谢您分享您的解决方案。作为参考,在 jQuery 中相当于:e = jQuery.Event("keyup"); e.keyCode = 13; $(node).trigger(e);
    • 从 IE9 开始,对于所有其他浏览器,您使用 createEvent() 和 dispatchEvent() 而不是 createEventObject 和 fireEvent()。事件名称中的前导“on”也被删除。见stackoverflow.com/a/2490876/921640
    • 不清楚如何定义触发事件的元素。您能否解释一下或扩展答案。谢谢。
    • @YevgeniyAfanasyev 它可以是通过document.getElementById 或类似方法获得的任何元素。
    【解决方案2】:
    e = e || window.event;
    keycode = e.keyCode || e.which;
    

    这将使事件在所有浏览器中都有效。 另外,我更喜欢使用me.onkeyup = function(e) { ... },但这只是个人喜好(我知道这种方法的缺点,但我有巧妙的方法来解决它们)

    【讨论】:

    • ee.keyCode 均已定义,因此代码不会以任何方式更改 e。不幸的是,e.keyCode 设置为 0。我是否正确传递了13
    • 我不熟悉fireEvent(),但我不这么认为。看起来更像是您向函数传递了一个额外的参数。
    猜你喜欢
    • 2013-04-27
    • 2015-02-09
    • 2017-10-15
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 2020-01-21
    相关资源
    最近更新 更多