我想禁用 ACE 编辑器的查找对话框,该对话框通过按命令 + F 组合键,当编辑器具有焦点时。
我已经尝试了以下方法(除其他外):
document.body.onkeydown =
document.body.onkeyup =
document.body.onkeypress = function(event) {
return false;
};
这会阻止人们能够正常键入,但不会阻止处理 Command + A 键。
如何防止命令+F组合被处理?
理想情况下,我希望能够仅阻止 Command + F 组合,因为我想继续使用其他 Command 组合键。
我已经为这个问题设置了一个JSFiddle。
最好使用"removeCommand"而不是将"addCommand"与假处理程序一起使用
editor.commands.removeCommand('find');
Andrei Andrushkevich的答案现在是一个更好,更简单的解决方案。
您可以使用 editor.commands.addCommand
重新定义与快捷方式关联的命令,然后只提供一个空函数。此自定义定义将优先于内置定义。在这种情况下:
editor.commands.addCommand({
name: "unfind",
bindKey: {
win: "Ctrl-F",
mac: "Command-F"
},
exec: function(editor, line) {
return false;
},
readOnly: true
})
这是更新的 JSFiddle。我没有找到明确的文档,但这是editor.commands
定义,这就是.addCommands()
所在的地方。(注意:自编写此答案以来,代码可能已更改。
根据jcubic的评论进行编辑
我不喜欢removeCommand,因为它从菜单中删除了它;通常,您将允许用户定义自己的键,并且某些用户可能希望将其重新添加。我开始认为我不想使用内置的,但后来我认为它有一些优点。
您只需清除绑定键即可禁用它。你可以做:
var find = editor.commands.byName['find'];
find.bindKey = {};
editor.commands.addCommand(find);
这将完成你也可以做很长一段路的事情:
editor.commands.addCommand({
name: 'find',
bindKey: {},
exec: editor.commands.byName['find'].exec
});
这样,如果你有一个GUI供用户设置自己的键绑定,"Find"仍将在命令列表中;它将被禁用,exec仍然在那里。
如果你有自己的查找函数,你也应该使用 addCommand 并将打开查找窗口的逻辑放在 exec 函数中:
editor.commands.addCommand({
name: 'find',
bindKey: { win:'Ctrl-F',mac:'Ctrl-F'},
exec: function(){
alert("My Function Here");
openMyFinderModal();
}
});