jQuery 热键:防止 IE 运行自己的快捷方式,例如 Alt+H

2023-12-01

Using jQuery hotkeys, I try to bind shortcuts like Alt + H, Alt + C to some specific actions in my site. The event propagation stops (as it should) in all browsers but IE. First of all, is it possible to achieve this? If so, how?

这是一个代码示例:

jQuery(document).bind('keydown', 'Alt+H',
     function (event)
     {
        $this.toggleMenu( 'H' );
        if(jQuery.browser.msie) {
            event.cancelBubble = true;
        }
                    else
                    {
            event.stopPropagation();
        }
        return false;
     } );

在 IE 中,该行$this.toggleMenu( 'H' );被执行,但随后cancelbubble似乎没有效果(浏览器打开其“帮助”菜单)


尝试这总是一件奇怪的事情(由于浏览器的内置热键等),但我很幸运地使用了 onKeyUp 事件。

keydown 的问题在于它一次可能只发送一个密钥。因此,如果您按下 ALT,它是按键按下的一个触发器,然后 C 是第二个触发器。 KeyPress 在某些环境中也存在问题,因为像 ALT 和 CTRL 这样的修饰键不计为按键(我想..有人能更好地解释这一点吗?)。

如果您使用 keyup,您可以检查是否按住 ALT,同时检查该键。仍在解决问题,但试试这个(我只在 win7:ie9 和 chrome 中验证):

$(window).keyup(function (e)
{
    // warning: only tested with EN-US keyboard / locale

    // check whether ALT pressed (and not ALT+CTRL, ALT+SHIFT, etc)
    var key = e.key || String.fromCharCode(e.keyCode);
    if (e.altKey && !e.ctrlKey && !e.shiftKey && key)
    {
        // if ALT pressed, handle the keycode shortcut
        var keyPressed = key.toUpperCase(); // normalize input
        switch (keyPressed)
        {
            case "C":
                // do stuff for ALT-C
                break;
            case "H":
                // do stuff for ALT-H 
                break;
        }
    }
});

问题/疑问:

  • 使用jQuery,但纯JS解决方案并不太复杂
  • 是否可以通过取消来防止默认浏览器行为 事件?
  • 它可以在 Chrome 和 IE9 以外的浏览器中运行吗? (可能是 FF 和 苹果浏览器)
  • 如果用户在释放字母键之前释放 ALT 键,则不会 工作
  • 如果用户在按 ALT 键之前按字母键,则不起作用
  • 尝试使用 ACCESS KEY 属性,但这只会设置焦点..我想要 单击超链接和/或触发一些基于 click() 事件的元素 在某些 ALT-X 组合上。
  • 虽然这对于企业 Web 应用程序来说可能是可以接受的(因为 区域设置和浏览器支持通常是较窄的焦点,并且由于用户 通常接受过软件培训),这可能无法接受 网站(由于使用大量浏览器,本地化 增加复杂性的担忧,等等)......必须考虑一下 多一点。

希望这对某人有帮助……请随意提出建设性的批评,因为这是我在构建网络应用程序时客户总是询问的功能。 (他们习惯了 80 年代和 90 年代遗留的表单驱动应用程序,并且需要广泛的键盘支持,这是可以理解的,尤其是当他们为此付费时!)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery 热键:防止 IE 运行自己的快捷方式,例如 Alt+H 的相关文章

随机推荐

  • ng2-charts条形图不显示数据/图表标签

    我在 angular2 中使用 ng2 charts 构建了水平条形图 但我不确定为什么我没有看到图形数据 也没有在控制台中看到任何错误 HTML
  • 迭代 JSON 对象字符串

    我是一个 JavaScript 菜鸟 在创建 json 字符串后 我有一个由 google gson API 创建的 JSON 字符串 我将其传递给我的 javascript 函数 所以在 javascript 变量中我有一个字符串如下 v
  • 如何创建可在 Windows 7 Phone 和 iPhone 上运行的应用程序?

    很清楚单点触控是解决方案的一部分 因为它允许 C 代码在 iPhone 上运行 然而 Mono Touch 包装了 iPhone API 因此不提供通用 API 另一种选择是一个 jave 脚本工具包 它可以在两者上工作并提供在线数据存储
  • 如何在 IBM Watson 聊天机器人对话中添加新行?

    目前 我正在使用 IBM Watson Coversation api 提供的聊天机器人服务 现在我面临一个问题 与在聊天机器人的文本回复中添加新行有关 谁能告诉我该怎么做 在这种情况下 您可以使用HTML为此 内部对话流程为 br 检查我
  • Unity - 如何从不同的场景获取游戏对象?

    首先 我是一个初学者 所以对我要轻松一些 我正在尝试从另一个场景激活和停用游戏对象 游戏中的玩家 基本上 我试图通过停用当前玩家模型来更改游戏场景中的玩家 并在用户按下商店场景中的某个按钮时激活游戏场景中所需的玩家模型 但我无法访问游戏对象
  • 在已安装程序列表中显示发布者名称

    我使用 Wix Toolset v3 11 生成 msi我的 Windows 应用程序的安装程序 如何让发布者名称出现在我的申请条目中设置 gt 应用程序和功能 I noticed that some entries in that lis
  • dplyr 如何按组落后

    我有一个包含交货时间的订单和应收账款的数据框 我可以使用 dplyr 根据组提前时间填写接收栏吗 df lt data frame team c a a a a a b b b b b order c 2 4 3 5 6 7 8 5 4 5
  • 如何在 JSF 中防止双击

    我们有一些搜索页面需要运行大量数据 并且需要一段时间才能完成 当用户单击搜索按钮时 我们希望不允许他们再次提交搜索结果 在 JSF 中是否有进行 双击 检测 预防的最佳实践 PrimeFaces 组件似乎可以做我们想要的事情 因为它会在单击
  • Python请求响应403禁止

    所以我想抓取这个网站 https www auto24 ee我能够毫无问题地从中抓取数据 但今天它给了我 响应 403 我尝试使用代理 将更多信息传递给标头 但不幸的是似乎没有任何效果 我在互联网上找不到任何解决方案 我尝试了不同的方法 之
  • 构建 3D Pandas 数据框

    我在 Pandas 中构建 3D DataFrame 时遇到困难 我想要这样的东西 A B C start end start end start end 7 20 42 52 90 101 11 21 213 34 56 74 9 45
  • 将图像从 Firebase 下载到 Flutter

    有很多将文件上传到 firebase 并获取 downloadUrl 的示例 但我没有发现获取图像的 DownloadURL 并在 Flutter 小部件中使用它的示例 这是与上传文件相关的 final StorageReference r
  • 从 Java 字符串中删除 ✅、

    我有一些字符串 其中包含各种不同的表情符号 图像 符号 并非所有字符串都是英语 其中一些字符串是其他非拉丁语言 例如 railway Cats and dogs I m on Apples Vi sign I m the king Cor
  • Jenkins Pipeline - SVN 轮询

    我有一个 Jenkins 管道模板 它在 Subversion 中使用 Jenkins 文件 Jenkins文件有svn checkout方法来签出真实的应用程序 真实应用程序的svn url是从jenkins环境变量传递的 我需要对实际应
  • Cron 作业在特定时间启动和停止

    是否可以设置一个 cron 作业只在某些日子的晚上工作 例如每个月的第一天下午 3 点到晚上 9 点 我只想在晚上服务器负载较低时进行电子邮件营销活动 是否可以在某个时间运行一个 cron 作业并在某个时间停止它 您可以在晚上 9 点使用第
  • 如何在 Firebase 数据库中解压多层嵌套 JSON

    在我的应用程序中 我会定期有一个 JSON 主题 例如message 然后嵌套在其中是random ID 那么message文本作为随机 ID 内的字符串 但是 我需要破译多个级别的随机 ID 在 Firebase for Swift 中这
  • Cosmos DB 中是否支持使用 OData 进行分页?

    我可以看到通过 SQL API 访问 Azure 中的 Cosmos DB 时支持偏移 限制 但 OData 是否支持此功能 UPDATE 您可以下载my demo在github上 和本文 and 官方文件可以帮助你 我的存储帐户中的数据
  • 根据条件运行中间件 - Laravel

    我有一个中间件 用于检查请求中的特定标头参数并根据该参数发回响应 但我遇到的问题是我不希望这个中间件始终在我的控制器中的函数上运行 我希望如果函数中的条件为真 例如 存储函数 中间件就会运行 我怎样才能实现这个目标 在执行控制器操作之前调用
  • 向量化 seq 的优雅方法?

    尽管标题相似 但这不是同一个问题在 R 中向量化rep和seq 我的近期目标 给定一个向量 我想生成一个新向量 其中包含原始值以及旧值中每个值之间的规则间隔 这并不难 一种策略是使用更通用的函数 给定两个向量和一个指定的by间隔 使用相同的
  • git commit 的 --date 参数的格式是什么

    我需要覆盖 Git 的提交日期 所有文档都指向 date参数 但随后就留下了一个不知道适当格式的线索 我已经尝试了我能想到的所有排列 我得到 致命 日期格式无效 每一个的错误 Git 2 6 2015 年第 3 季度 添加了一个新选项 Se
  • jQuery 热键:防止 IE 运行自己的快捷方式,例如 Alt+H

    Using jQuery hotkeys I try to bind shortcuts like Alt H Alt C to some specific actions in my site The event propagation