7

我想禁用 ACE 编辑器的查找对话框,当编辑器获得焦点时,通过按 Command+组合键调用该对话框。F

我尝试了以下(除其他外):

document.body.onkeydown = 
document.body.onkeyup = 
document.body.onkeypress = function(event) {      
    return false;
};

这可以防止一个人能够正常打字,但不会阻止Command+A key被处理。

如何防止Command+F组合被处理?

理想情况下,我希望能够仅阻止Command+F组合,因为我想继续使用其他Command组合键。

我已经为这个问题设置了一个JSFiddle

4

3 回答 3

25

最好使用“removeCommand”而不是使用带有假处理程序的“addCommand”

editor.commands.removeCommand('find');
于 2015-01-06T11:04:39.327 回答
7

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 的评论编辑

于 2012-12-03T10:01:57.207 回答
0

我不喜欢 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 供用户设置自己的键绑定,“查找”仍将在命令列表中;它只会被禁用,而 exec 仍然会在那里。

如果您有自己的查找功能,您还应该使用 addCommand 并将打开查找窗口的逻辑放在 exec 功能中:

editor.commands.addCommand({
    name: 'find',
    bindKey: { win:'Ctrl-F',mac:'Ctrl-F'},
    exec: function(){
        alert("My Function Here");
        openMyFinderModal();
    }
});
于 2020-12-10T06:12:08.653 回答