jQuery:如何停止 Ctrl + A 的传播?

标签 jquery events selection propagation ctrl

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

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

现在我希望用户能够通过按 CtrlA 来选择当前 map 上的所有标记。我用来实现此目的的代码如下所示:

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,即除了通过自定义选择选择我的标记之外在 map 上实现,整个网页被选中。这很烦人:在 map 旁边,该页面上没有可以选择的文本,所以确实没有意义 - 我想在我的 map 时禁用 CtrlA显示。

P.S. 我尝试使用How can I disable Ctrl+A (select all) using jquery in a browser?中显示的代码但无法让它发挥作用。 API 中真的有此功能吗?

最佳答案

假设您的错误是您正在使用 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

关于jQuery:如何停止 Ctrl + A 的传播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13562041/

相关文章:

jQuery:如何访问 id 中带有加号 (+) 的元素

javascript - 扩展 jquery ui 小部件 - 如何访问父事件

java - 将鼠标事件分派(dispatch)到最深的可见 JComponent

PHP/GD,如何将圆圈从一个图像复制到另一个图像?

jqgrid - 按单元格值突出显示 jqgrid 行

javascript - 根据日期值使用 jQuery 对表格进行排序

javascript - 单击两次时 .focus() 不聚焦

javascript - 使用 fs 读取文件后解析 Json

javascript - 处理只产生按键事件而不产生 keydown/keyup 事件的键盘

javascript - 序列化 html : placing span elements around selected text while preserving the HTML structure