首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在任何keyup之后codemirror自动完成?

在任何keyup之后codemirror自动完成?
EN

Stack Overflow用户
提问于 2012-12-06 21:02:23
回答 11查看 25.3K关注 0票数 26

我正在尝试添加一个自定义的自动完成,我想在用户输入时触发它(当然是可配置的)。我找到了几个codemirror的自动补全示例:

http://codemirror.net/demo/complete.htmlhttp://codemirror.net/demo/xmlcomplete.html

但是这两个都是在特定的键上触发的(一个是Control Space,另一个是'<‘),并且都使用extraKeys功能来处理事件,但我想从任何键触发。我尝试过以下几种方法:

代码语言:javascript
复制
        var editor = CodeMirror.fromTextArea(document.getElementById("code"),
        {
             lineNumbers: true,
             mode: "text/x-mysql",
             fixedGutter: true,
             gutter: true,
//           extraKeys: {"'.'": "autocomplete"}
             keyup: function(e)
             {
                console.log('testing');
             },
             onkeyup: function(e)
             {
                console.log('testing2');
             }
        });

但一直没有运气。关于如何从任何keyup事件触发,有什么建议吗?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-12-07 05:54:51

备注:此答案适用于CodeMirror的最新版本。

代码语言:javascript
复制
onKeyEvent: function(e , s){
                if (s.type == "keyup")
                {
                    console.log("test");   
                }
            }
票数 2
EN

Stack Overflow用户

发布于 2015-10-09 01:01:42

对于5.7版本,之前提出的两种解决方案都不适合我(我认为它们甚至在更早的版本中也有错误)。我的解决方案

代码语言:javascript
复制
    myCodeMirror.on("keyup", function (cm, event) {
        if (!cm.state.completionActive && /*Enables keyboard navigation in autocomplete list*/
            event.keyCode != 13) {        /*Enter - do not open autocomplete list just after item has been selected in it*/ 
            CodeMirror.commands.autocomplete(cm, null, {completeSingle: false});
        }
    });

工作原理:

仅当自动完成弹出窗口尚未打开时,才会打开该弹出窗口(否则,键盘导航将导致重新打开弹出窗口,同时再次选择第一项)。

当你点击Enter时,你想要关闭弹出窗口,所以这是一个不应该触发自动完成的字符的特殊情况(你可以考虑一个情况,当你想显示空行的自动完成时)。

最后一个修复是设置completeSingle: false,这可以防止你在输入某个单词时出现大小写,中间会自动完成,然后你可以通过反射继续输入。因此,用户将始终需要从弹出窗口中选择所需的字符串(即使是单个选项)。

票数 32
EN

Stack Overflow用户

发布于 2015-11-25 13:21:04

最类似于智能感知的行为可以通过以下方式实现:

代码语言:javascript
复制
var ExcludedIntelliSenseTriggerKeys =
{
    "8": "backspace",
    "9": "tab",
    "13": "enter",
    "16": "shift",
    "17": "ctrl",
    "18": "alt",
    "19": "pause",
    "20": "capslock",
    "27": "escape",
    "33": "pageup",
    "34": "pagedown",
    "35": "end",
    "36": "home",
    "37": "left",
    "38": "up",
    "39": "right",
    "40": "down",
    "45": "insert",
    "46": "delete",
    "91": "left window key",
    "92": "right window key",
    "93": "select",
    "107": "add",
    "109": "subtract",
    "110": "decimal point",
    "111": "divide",
    "112": "f1",
    "113": "f2",
    "114": "f3",
    "115": "f4",
    "116": "f5",
    "117": "f6",
    "118": "f7",
    "119": "f8",
    "120": "f9",
    "121": "f10",
    "122": "f11",
    "123": "f12",
    "144": "numlock",
    "145": "scrolllock",
    "186": "semicolon",
    "187": "equalsign",
    "188": "comma",
    "189": "dash",
    "190": "period",
    "191": "slash",
    "192": "graveaccent",
    "220": "backslash",
    "222": "quote"
}

EditorInstance.on("keyup", function(editor, event)
{
    var __Cursor = editor.getDoc().getCursor();
    var __Token = editor.getTokenAt(__Cursor);

    if (!editor.state.completionActive &&
        !ExcludedIntelliSenseTriggerKeys[(event.keyCode || event.which).toString()] &&
        (__Token.type == "tag" || __Token.string == " " || __Token.string == "<" || __Token.string == "/"))
    {
        CodeMirror.commands.autocomplete(editor, null, { completeSingle: false });
    }
});
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13744176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档