8

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

我为用户实现了选择,因此他可以单击标记以选择它们,然后按住 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在显示我的地图时禁用。

PS 我尝试使用如何在浏览器中使用 jquery 禁用 Ctrl+A(全选)中显示的代码?但无法让它工作。这个功能真的在 API 中吗?

4

2 回答 2

11

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

在这个演示中这对我来说很好

于 2012-11-26T10:10:25.920 回答
-1

啊,我找到了诀窍:

e.preventDefault();

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

于 2012-11-26T10:11:15.553 回答