我目前正在开发一个依赖于 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/