我最近在我的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);
你帮我吗?
答案 0 :(得分:2)
delete editor.keyBinding;
不是一个好的解决方案,它会在控制台
未捕获的TypeError:无法读取属性&c; ctrl-d'未定义的 在CommandManager.handleKeyboard(ace.js:10830) 在KeyBinding。$ callKeyboardHandlers(ace.js:4081) 在KeyBinding.onCommandKey(ace.js:4113) 在Editor.onCommandKey(ace.js:12424) 在normalizeCommandKeys(ace.js:1648) 在HTMLTextAreaElement。 (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]
}