Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 代码镜像每次内容更改时获取当前行号_Javascript_Html_Css_Codemirror - Fatal编程技术网

Javascript 代码镜像每次内容更改时获取当前行号

Javascript 代码镜像每次内容更改时获取当前行号,javascript,html,css,codemirror,Javascript,Html,Css,Codemirror,我正在尝试使用代码镜像创建一个文本编辑器。我想像文本编辑器一样,在显示屏底部向用户显示当前行号 到目前为止,我已经尝试过: function updateInfo(){ var lines = editor.lineCount(); document.getElementById('line-no.').innerText = lines; editor.refresh(); } editor.on("change", updateInfo()); line-no.是一个span,我想在其中显

我正在尝试使用代码镜像创建一个文本编辑器。我想像文本编辑器一样,在显示屏底部向用户显示当前行号

到目前为止,我已经尝试过:

function updateInfo(){
var lines = editor.lineCount();
document.getElementById('line-no.').innerText = lines;
editor.refresh();
}
editor.on("change", updateInfo());
line-no.
是一个
span
,我想在其中显示行号。这适用于第一行号码,但当我转到其他行时,它没有任何作用。控制台显示此错误:

codemirror.js:2154 Uncaught TypeError: Cannot read property 'apply' of undefined
at codemirror.js:2154
at fireCallbacksForOps (codemirror.js:2111)
at finishOperation (codemirror.js:2125)
at endOperation (codemirror.js:3747)
at HTMLTextAreaElement.<anonymous> (codemirror.js:3884)
codemirr.js:2154未捕获类型错误:无法读取未定义的属性“apply”
在codemirr.js:2154
在fireCallbacksForOps(codemirr.js:2111)
最终操作时(codemirr.js:2125)
内部操作(codemirror.js:3747)
在HtmlTextArea元素。(codemirror.js:3884)

更新

要在编辑器中跟踪更新,请在事件上注册处理程序。当光标或所选内容发生更改时,将触发此事件
使用CodeMirror实例调用处理程序;在此情况下,您可以将该方法调用为包含光标当前所在行号的对象。
请注意,行号是从零开始的,因此您可以将其递增1,也可以不递增1


在编辑器中更改文档时设置当前行号 发生此错误的原因是,甚至在注册之前就调用了
updateInfo
回调。因此,注册为回调的值是未定义的

editor.on('change', updateInfo()) // -> editor.on('change', undefined)
这可以通过注册函数来解决

editor.on('change', updateInfo)
但是,回调的签名应该遵循记录的内容

传递CodeMirror的
实例和一个
changeObject
,您可以从中检索当前行

“更改”(实例:CodeMirror,changeObj:object)

每次更改编辑器的内容时激发。
changeObj
是一个
{from,too,text,removed,origin}
对象,包含关于作为第二个参数发生的更改的信息
from
to
是更改开始和结束的位置(在更改前的坐标系中)(例如,如果位置位于第19行的开头,则可能是
{ch:0,第18行}
)<代码>文本
是一个字符串数组,表示替换更改范围的文本(按行分割)
removed
是以前介于
from
to
之间的文本,此更改会覆盖该文本。此事件在DOM更新发生之前的操作结束之前激发


非常感谢你!解释是可怕的,它的工作预期!您可以收听
cursorActivity
事件。我会更新我的答案来展示一个例子不需要,我自己想出来的。无论如何谢谢你!很高兴你知道了!
editor.on('change', updateInfo)
const STATUS_CURRENT_LINE = document.getElementById('line-no.');

function updateInfo(instance, changeObj){
   STATUS_CURRENT_LINE.innerText = changeObj.to.line;
}

editor.on("change", updateInfo);