事件
各个与CodeMirror相关的对象都会触发事件,这使得你的代码可以响应不同的情景。你可以通过对这些对象使用on
和off
方法来注册handler。如果想触发你自定义的事件,使用CodeMirror.signal(target, name, args…)
,其中target需要是一个非DOM节点的对象。
编辑器事件
编辑器实例会触发以下这些事件。其中的instance
参数总是指向编辑器本身。
change: (instance: CodeMirror, changeObj: object)
每当编辑器内容发生变化时触发。参数changeObj是一个{from, to, text, removed, origin}
对象,包含内容变化的信息。其中from
和to
是内容改变发生的起止位置(改变发生之前),举个例子,如果改变始于第19行之初,则from
为{ch:0, line:18}
。text
替换起止位置之间内容的文字,按行分割开,组成数组。removed
则是被替换掉的内容。这个事件会在operation
临结束前,在DOM更新之前触发。
changes: (instance: CodeMirror, changes: array:
类似于change事件,不过是在每次operation后,将改变一次过打包成数组传出来。而展现这些改变,又将出发一次新的operation。
beforeChange: (instance: CodeMirror, changeObj:object)
这个事件在内容改变生效前触发,它的handler可以此来修改或取消这次改变。其中的changeObj
对象有from
, to
, text
属性。它还包含一个cancel()
方法,用于取消这次改变,而且如果这次改变不是来自撤销(undo)与重做(redo)操作的画,它还会有一个update(from, to, text)
方法,用来修改这次改变。update
方法的3个参数都不是必填的,可以不传入,以直接使用原先的值。注意:你不该在beforeChange
的handler中做任务会导致document或其视觉表现的操作。
cursorActivity: (instance: CodeMirror)
每当光标或内容选择移动时出发,因此编辑器中任务内容的改变也会出发。
keyHandled: (instance: CodeMirror, name: string, event: Event)
每当一个快捷键被通过key map handled时触发。name
是被handled的键(例如”ctrl-x”或者“‘q’”),而event则是DOM的keydown或keypress事件。
inputRead: (instance: CodeMirror, changeObj: object)
每当被因此对textarea中有新的输入被读取到时触发(可能是来自键盘输入或粘贴)。
electricInput: (instance: CodeMirror, line: integer)
当输入的文字匹配mode的electric模式时触发,这会导致该行的缩进发生改变。
beforeSelectionChange: (instance: CodeMirror, obj: {range, origin, update}) ???
viewportChange: (instance: CodeMirror, from: number, to: number)
当可视区发生变化时触发(这可能是由于滚动、编辑内容等原因造成)。其参数from
和to
给出了可视区新的起始位置。
swapDoc: (instance: CodeMirror, oldDoc: Doc)
当编辑器的document被使用swapDoc
方法更换掉时触发。
gutterClick: (instance: CodeMirror, line: integer, gutter: string, clickEvent: Event)
每当编辑器的gutter被点击时触发。其参数分别为编辑器实例;为被点击的行数,从0开始计数;gutter的CSS class名;mousedown
的原始事件。
gutterContextMenu: (instance: CodeMirror, line: integer, gutter: string, contextMenu: Event)
每当编辑器的gutter收到contextmenu
事件时触发。与gutterClick不同的是,最后一个参数是contextmenu事件。你可以preventDefault
这个事件,这会通知CodeMirror不再进一步handle。
focus: (instace: CodeMirror)
当编辑器获得焦点时触发。
blur: (instance: CodeMirror)
当编辑器失去焦点时触发。
scroll: (instance: CodeMirror)
当编辑器滚动时触发。
scrollCursorIntoView (instance: CodeMirror, event: Event)
???
update: (instance: CodeMirror)
每当CodeMirror更新它的DOM展示时触发。
renderLine (instance: CodeMirror, line: LineHandle, element: Element) 每当一行需要被绘制(重绘)成DOM时触发。它触发在DOM元素建立好之后,但在加入document之前。handler可以改动该元素的样式,或是为其添加event handlers,但不该尝试改变编辑器的状态。
mousedown, dbclick, touchstart, contextmenu, keydown, keypress, keyup, cut, copy ,paste, dragstart, dragenter, dragover, dragleave, drop: (instance: CodeMirror, event: Event) 当CodeMirrorhandle这些DOm事件时触发。你可以preventDefault这些事件,也可以把它们的codemirrorIgnore属性设为真值,以告知CodeMirror不要再继续handle。
文档对象(Document objects, CodeMirror.Doc的实例)
change: (doc: CodeMirror.Doc, changeObj: object)
每当document发生改变时触发。参数changeObj类似于编辑器change
事件的changeObj。
beforeChange: (doc: CodeMirror.Doc, change: object) 参见编辑器的同名事件。
cursorActivity: (doc: CodeMirror.Doc) 每当document中的光标和选区变化时触发。
beforeSelectionChange: (doc: CodeMirror.Doc, selection: {head, anchor}) 参见编辑器的同名事件。
Line handles as returned by, for example, getLineHandle
(可以理解为行对象)
delete: () 当行对象被删除时触发。
change: (line: LineHandle, changeObj: object) 当行对象中的内容发生改变(但这一行并没有被完全删除)时触发。changeObj跟编辑器对象的同名事件一样。
Marked range handles(CodeMirror.TextMarker), as returned by markText and setBookmark
???