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

时间:2012-11-26 09:36:48

标签: jquery events selection propagation ctrl

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

我为用户实施了选择,因此他可以点击标记来选择它们,然后按住Ctrl键单击以添加标记以供选择。这很有效。

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

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,即我的自定义选择选择了我的标记在地图上实施,选择整个网页。这很烦人:在地图旁边没有可以选择的页面上的文字,所以实际上没有意义 - 我想在我的地图中禁用 Ctrl A 显示。

P.S。 我试图使用How can I disable Ctrl+A (select all) using jquery in a browser?中显示的代码,但无法使其工作。这个功能真的在API中吗?

2 个答案:

答案 0 :(得分:10)

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

很好

答案 1 :(得分:0)

啊,我找到了诀窍:

e.preventDefault();

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