如何防止浏览器覆盖我的 ace 编辑器的 keyBindings?
How to prevent the browser to override my keyBindings of ace editor?
这个问题是在我实现了 ace 编辑器之后出现的...
这里是link:
我有 ace 编辑器,感谢 for 循环:
for (key in editor.keyBinding.$defaultHandler.commandKeyBinding) {
if (key !== "ctrl-d")
delete editor.keyBinding.$defaultHandler.commandKeyBinding[key];
}
我有自己的keyBindings,ace编辑器也有自己的,我删除了,除了一个,那个是CTRL+D删除一行...
但是,我的浏览器已经在书签上添加了 ctrl-d 内容,我现在需要阻止它,有什么想法吗?
我在 ace-editor 中测试过,默认功能似乎会自行阻止默认键盘快捷键。但是为了回答您的问题,您可以使用 ctrl + d
和 command + d
的事件侦听器而不是 e.preventDefault()
和 e.stopPropagation()
... 现在您将如何使用它使用 ace 编辑器:
document.addEventListener("keydown", function(e) {
if (e.key.toLowerCase() == "d" && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
editor.execCommand("removeline");
e.preventDefault();
e.stopPropagation();
}
}, false);
- 注意我是如何使用
e.key.toLowerCase() == "d"
而不是 e.keyCode == 68
的……这是因为 KeyboardEvent.keyCode is now marked as deprecated so I used KeyboardEvent.key 而不是。使用 .toLowerCase()
因此即使切换 Caps Lock 时快捷方式也能正常工作。
- 使用
e.key
而不是 e.keyCode
的一个缺点是 e.key
仅适用于 English/Latin 键盘输入,因此键必须是 "d"而 e.keyCode
将使用其他语言输入,例如阿拉伯语 (ctrl + ي)...所以您决定使用哪一个。
如果您已经删除了所需命令的默认值 binding/command ,您可以像这样添加它而无需其键绑定:
editor.commands.addCommand({
name: "removeline",
exec: function(editor) { editor.removeLines(); },
scrollIntoView: "cursor",
multiSelectAction: "forEachLine"
});
- 此命令的存在是必要的,因此
editor.execCommand("removeline")
将起作用
这个问题是在我实现了 ace 编辑器之后出现的...
这里是link:
我有 ace 编辑器,感谢 for 循环:
for (key in editor.keyBinding.$defaultHandler.commandKeyBinding) {
if (key !== "ctrl-d")
delete editor.keyBinding.$defaultHandler.commandKeyBinding[key];
}
我有自己的keyBindings,ace编辑器也有自己的,我删除了,除了一个,那个是CTRL+D删除一行...
但是,我的浏览器已经在书签上添加了 ctrl-d 内容,我现在需要阻止它,有什么想法吗?
我在 ace-editor 中测试过,默认功能似乎会自行阻止默认键盘快捷键。但是为了回答您的问题,您可以使用 ctrl + d
和 command + d
的事件侦听器而不是 e.preventDefault()
和 e.stopPropagation()
... 现在您将如何使用它使用 ace 编辑器:
document.addEventListener("keydown", function(e) {
if (e.key.toLowerCase() == "d" && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
editor.execCommand("removeline");
e.preventDefault();
e.stopPropagation();
}
}, false);
- 注意我是如何使用
e.key.toLowerCase() == "d"
而不是e.keyCode == 68
的……这是因为 KeyboardEvent.keyCode is now marked as deprecated so I used KeyboardEvent.key 而不是。使用.toLowerCase()
因此即使切换 Caps Lock 时快捷方式也能正常工作。 - 使用
e.key
而不是e.keyCode
的一个缺点是e.key
仅适用于 English/Latin 键盘输入,因此键必须是 "d"而e.keyCode
将使用其他语言输入,例如阿拉伯语 (ctrl + ي)...所以您决定使用哪一个。
如果您已经删除了所需命令的默认值 binding/command
editor.commands.addCommand({
name: "removeline",
exec: function(editor) { editor.removeLines(); },
scrollIntoView: "cursor",
multiSelectAction: "forEachLine"
});
- 此命令的存在是必要的,因此
editor.execCommand("removeline")
将起作用