我最近在我的jsp页面上有一个textarea
为此,我在键盘上有自己的快捷键
然后,我实现了 ace 编辑器,然后我所有的旧键绑定都不起作用
然后我搜索了一段时间,并找到以下代码:
//I did this before, to add the ace editor
var editor = ace.edit("fileInfo");
var JavaScriptMode = ace.require("ace/mode/javascript").Mode;
editor.session.setMode(new JavaScriptMode());
//Then I found this for the keyBindings
delete editor.keyBinding;
最后一行禁用了ace编辑器中的所有keyBindings,并且我自己的keyBindings可以正常工作。。。一切都很好,但是随后,我对ace编辑器进行了很多搜索,找到了一个有趣的选项,然后是那个我喜欢使用的keyBinding,那就是DELETE ROW键绑定Ctrl + D
我现在想找回它,但只有它,而不是其他,而且我的旧keyBindings也应该起作用...
我的旧keyBindings的代码如下所示:
document.addEventListener("keydown", function(e) {
// Ctrl + S = SAVE
if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
e.preventDefault();
e.stopPropagation();
if($scope.mode!='BROWSE')
{
$('#saveBtn').trigger("click");
}
}
}, false);
你能帮我吗?
delete editor.keyBinding;
这不是一个好的解决方案,它将在控制台中产生错误消息
未捕获到的TypeError:无法在KeyBinding.onCommandKey(ace.js:4113)处的KeyBinding。$ callKeyboardHandlers(ace.js:4081)处的CommandManager.handleKeyboard(ace.js:10830)处读取未定义的属性'ctrl-d'。 HTMLTextAreaElement上的normalizeCommandKeys(ace.js:1648)上的onCommandKey(ace.js:12424)。(ace.js:1667)
//safely delete all bindings
editor.keyBinding.$defaultHandler.commandKeyBinding = {}
//bind the wanted command
editor.commands.addCommand({
name: "removeline",
bindKey: { win: "Ctrl-D", mac: "Command-D" },
exec: function(editor) { editor.removeLines(); },
scrollIntoView: "cursor",
multiSelectAction: "forEachLine"
});
现在已经定义了命令,可以根据需要从自己的代码中调用它:
editor.execCommand("removeline")
使用for (key in obj)
循环通过键绑定和删除不等于键ctrl-d
和command-d
:
for (key in editor.keyBinding.$defaultHandler.commandKeyBinding) {
if (key !== "ctrl-d" && key !== "command-d")
delete editor.keyBinding.$defaultHandler.commandKeyBinding[key]
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句