【问题标题】:jQuery: How to stop propagation of Ctrl + A?jQuery:如何停止传播 Ctrl + A?
【发布时间】:2012-11-13 18:20:17
【问题描述】:

我目前正在开发一个依赖于地图(通过 Leaflet.js 提供 OpenStreetMap 数据)和地图上显示的标记的应用程序。

我为用户实现了 selection,因此他可以单击标记来选择它们,然后按住 Ctrl 键单击以将标记添加到选择中。这很好用。

现在我希望用户能够通过点击 CtrlA 来选择地图上当前的所有标记。我用来实现这一点的代码如下所示:

jQuery(document).keydown(function(e) {
  if (e.ctrlKey) {
    if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a'
      e.stopPropagation();
      // SELECT ALL MARKERS HERE...
    }
  }
});

就同时按下 Ctrl 和 A 键而言,这有效,选择是如我所愿。

我的问题: 即使我添加了停止传播事件的行,浏览器(在 Chrome 和 Opera 上测试)仍然执行通常的 Ctrl+A-Selection,即除了我的标记被我的自定义选择选中在地图上实现,整个网页被选中。这很烦人:在地图旁边没有可以选择的页面上的文本,所以真的没有意义 - 我想禁用 CtrlA 而我的地图显示出来了。

附注 我尝试使用How can I disable Ctrl+A (select all) using jquery in a browser? 中显示的代码,但无法让它工作。 API 中真的有这个功能吗?

【问题讨论】:

    标签: jquery events selection propagation ctrl


    【解决方案1】:

    假设您的错误是您使用的是e.stopPropagation(),它只会阻止事件的进一步冒泡(因为您的事件已附加到文档 - 这是无用的)。改用e.preventDefault()

    jQuery(document).keydown(function(e) {
      if (e.ctrlKey) {
        if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a'
          e.preventDefault();
          // SELECT ALL MARKERS HERE...
        }
      }
    });
    

    这对我在this demo 上很好用

    【讨论】:

    • 啊,我们在同一秒找到了它... :) 好的,先生,请接受。
    【解决方案2】:

    啊,我找到了诀窍:

    e.preventDefault();
    

    阻止浏览器执行任何默认操作。在上述情况下,这会阻止通常在 Ctrl+A 上触发的全选事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2022-05-28
      • 1970-01-01
      相关资源
      最近更新 更多