gpt4 book ai didi

firefox - Ace 在 Firefox 的焦点上选择编辑器中的所有文本

转载 作者:行者123 更新时间:2023-12-02 10:35:19 26 4
gpt4 key购买 nike

我有一个嵌入到 Bootstrap 3 模态中的 Ace 编辑器。在显示模式之前,我在编辑器中设置值如下:

var editor = ace.edit(aceEditorId);
editor.session.setValue(val, -1); // set value at document start
editor.session.selection.clearSelection();

我还有一个用于调整编辑器大小的模态“显示”事件处理程序:

$(editSnippetSelector).on("shown.bs.modal", function () {
var editorId = getSnippetEditorId();
var snippetEditor = ace.edit(editorId);
snippetEditor.resize();

当我关注 Firefox 中的编辑器时,所有编辑器文本都被选中。我无法通过单击移动光标或删除选择。我只能通过按退格键或其他键(例如字母或回车)来删除文本。

这不会发生在 Chrome 或 IE 中。

作为实验,我也加了这段代码也无济于事:

codeEditor.on("focus", function () {
codeEditor.getSession().setValue(codeEditor.getSession().getValue());
codeEditor.clearSelection();
});

我还应该看哪里?还有其他人看到过类似的行为吗?

更新:

我注意到 ace.js 中有一个 onSelect 函数会在无限循环中被调用。它在 2061 行:https://github.com/ajaxorg/ace-builds/blob/master/src-noconflict/ace.js#L2061

函数代码如下:

var onSelect = function(e) {
if (copied) {
copied = false;
} else if (isAllSelected(text)) {
host.selectAll();
resetSelection();
} else if (inputHandler) {
resetSelection(host.selection.isEmpty());
}
};

浏览 Firefox 调试器中的代码显示对 isAllSelected(text) 的调用返回 true,因此再次引发选择事件。

最佳答案

ace.js 有一个 onSelect 处理程序,它在 Firefox 中的无限循环中被调用。

这是该函数的原始代码:

var onSelect = function(e) {
if (copied) {
copied = false;
} else if (isAllSelected(text)) {
host.selectAll();
resetSelection();
} else if (inputHandler) {
resetSelection(host.selection.isEmpty());
}
};

text 是一个文本区域 DOM 元素。 isAllSelected(text) 使用此代码检查是否选择了所有文本:

    return text.selectionStart === 0 && text.selectionEnd === text.value.length;

如您所见,即使对于空文本区域,这也会返回 true,这会导致 host.selectAll() 被调用,以某种方式向下传播并再次触发 select 事件。

我添加了一个空文本区域检查,它解决了这个问题。现在的代码是这样的:

var onSelect = function(e) {
if (copied) {
copied = false;
} else if (text.value && isAllSelected(text)) {
host.selectAll();
resetSelection();
} else if (inputHandler) {
resetSelection(host.selection.isEmpty());
}
};

关于firefox - Ace 在 Firefox 的焦点上选择编辑器中的所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28059842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com