javascript - 如何在 ACE 编辑器中禁用装订线单击时的行选择?

标签 javascript ace-editor

我正在尝试禁用所有用户与 ace 编辑器的交互。我设法通过以下设置停止大多数交互:

codeEditor.setReadOnly(true);
codeEditor.setHighlightActiveLine(false);
codeEditor.setHighlightGutterLine(false);
codeEditor.container.style.pointerEvents = "none";
codeEditor.renderer.$cursorLayer.element.style.opacity = 0;

但是,虽然现在禁用了大部分交互性,但装订线上的 mousedown 事件仍然有效。例如,当您单击装订线时,它仍然选择该行上的文本。其他事件(例如双击全选或代码折叠)似乎也有效。您可以在这里检查: http://jsfiddle.net/squarePenguin/zhpms1mm/

我尝试删除排水沟上的听众,但似乎没有任何效果。这是我尝试过的一切:

codeEditor.getSession().removeAllListeners("guttermousedown");
codeEditor.getSession().removeAllListeners("gutterclick");
codeEditor.getSession().removeAllListeners("gutterdblclick");
codeEditor.getSession().removeAllListeners("guttermousemove");
codeEditor.getSession().removeAllListeners("click");
codeEditor.getSession().removeAllListeners("mousedown");

你有什么想法吗?感谢您的耐心等待!

最佳答案

你可以这样做

stop = function(e) {e.stop()}
editor.on("guttermousedown", stop, true);
editor.on("gutterclick", stop, true);
editor.on("gutterdblclick", stop, true);
editor.on("guttermousemove", stop, true);
editor.on("click", stop, true);
editor.on("mousedown", stop, true);

codeEditor.getSession().removeAllListeners 不起作用,因为鼠标事件是在编辑器而不是 session 上分派(dispatch)的,并且 removeAllListeners 不会删除 defaultHandlers

codeEditor.container.style.pointerEvents = "none"; 不起作用,因为 ace 中的某些元素具有 pointerEvents="auto" 样式。

关于javascript - 如何在 ACE 编辑器中禁用装订线单击时的行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30916113/

相关文章:

javascript - AJAX 仅更新 div 一次

javascript - 单击图标展开并显示文本框

javascript - 如何通过 javascript 覆盖内联 css?

javascript - Mustache.js 未正确呈现

javascript - 在 ace 编辑器中获取可见文档范围

javascript - 在页面加载后设置 Ace Editor 光标位置

javascript - 使用 "ace"库添加新语言

javascript - 如何使用for循环更新mongodb中的对象数组

javascript - Ace Editor 中 iframe 源代码输出中出现不需要的空间

javascript - 如何使用 addDynamicMarker 将添加的自定义 html 附加到 ace 编辑器行?