【问题标题】:Mouse click simulates keyboard key in JavaScript鼠标点击模拟 JavaScript 中的键盘键
【发布时间】:2014-02-13 18:03:49
【问题描述】:

我的情况是在应用程序 (HTML/XUL) 中有一些功能键的键绑定 (F5, F7 & F9)以便与其他应用程序通信。

现在我必须为同一个应用程序制作基于触摸的界面,而无需键盘和高级触摸事件。所有触摸点击实际上与鼠标点击相同,我需要 3 个按钮/链接的行为与 F5F7F9 键相同。

不要问原因,我只能说我需要保留那个键绑定。

我可以将鼠标点击链接指定为按下 F 键吗?

【问题讨论】:

    标签: javascript keyboard touch dom-events key-bindings


    【解决方案1】:

    我猜有两种方法可以做到这一点。

    简单的方法是让您的 F 键调用一个函数,然后在捕获鼠标事件时调用相同的函数。

    另一种方法是捕获鼠标事件,并触发 F 键按下事件。那么它几乎就是这个问题的重复:

    How to simulate a mouse click using JavaScript?

    【讨论】:

    • Tnx,您已引导我找到答案。我不得不付出一点努力,因此对我自己的问题给出了准确的答案,以便将来帮助某人。
    【解决方案2】:

    Jake 的回答是大部分解决方案,并基于此我给出了整个答案,因为对于初学者来说,修改功能并不那么容易。 这是this thread修改后的函数:

    function simulateKeyPress(target, options) {
        var event = target.ownerDocument.createEvent('KeyEvents'),
            options = options || {};
    
        // Set your options or || default values
        var opts = {
            type: options.type                  || "keypress",
            bubbles: options.bubbles            || true,
            cancelable: options.cancelable      || true,
            viewArg: options.viewArg            || null,
            ctrlKeyArg: options.ctrlKeyArg      || false,
            altKeyArg: options.altKeyArg        || false,
            shiftKeyArg: options.shiftKeyArg    || false,
            metaKeyArg: options.metaKeyArg      || false,
            keyCodeArg: options.keyCodeArg      || 0,
            charCodeArg: options.charCodeArg    || 0
        }
    
        // Pass in the options
        event.initKeyEvent(
            opts.type,
            opts.bubbles,
            opts.cancelable,
            opts.viewArg,
            opts.ctrlKeyArg,
            opts.altKeyArg,
            opts.shiftKeyArg,
            opts.metaKeyArg,
            opts.keyCodeArg,
            opts.charCodeArg
        );
    
        // Fire the event
        target.dispatchEvent(event);
        event.stopPropagation;
    }
    

    现在我们在想要的元素/事件上调用它来按下想要的键。第二个参数是所有选项都可以更改的对象(在我的情况下 keyCodeArg: 116 只需要发送以模拟 F5 按键)。

    document.getElementById(element).addEventListener('click', function() {
        simulateKeyPress(this, {keyCodeArg: 116});
    });
    

    Mozilla 开发者网络有关于 KeyboardEventsinitKeyEvent 的精彩文章。

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      相关资源
      最近更新 更多