我正在尝试仅用一行文本来设置Ace编辑器。
这个想法是模仿<input type="text">
框的行为,但是使用语法着色:
当前,如果用户在编辑器中按下Enter
,则会创建新行:
所以我的问题是:
如何将Ace设置为仅允许一行(如标准文本输入框)?
以下是到目前为止我已经尝试过的方法,以及未成功的原因。
editor.undo()
,则在change
上调用e.lines.length > 1
问题是,在对增量进行实际更改之前会触发
change
,因此undo()
在这里不起作用(或与先前的增量有关)keypress
,则取消Event.which = 13
它可以工作,但很脏,不能处理粘贴多行文本的情况,因此我们也需要处理
paste
事件-这会使该解决方案更加肮脏。我也非常有信心将考虑更多的极端情况。 e
中的on("change", function(e) { ... })
例如,在回调函数中说
e = {}
,前提是e
只是对实际对象的引用。没有任何效果。 找不到这样的参数还没有成功...
最佳答案
由于某种原因,e.preventDefault
和e.stopPropagation
在更改事件处理程序中均不起作用。但是您可以进行查找替换。
参见 fiddle :http://jsfiddle.net/vittore/3rLfdtxb/
var editor = ace.edit("editor");
editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/javascript");
editor.setFontSize(30)
editor.getSession().on('change', function(e) {
console.log(e)
if (e.data.text.charCodeAt(0) === 10 && e.data.action == "insertText") {
console.log('cancel event')
//e.preventDefault() // doesnt work
//e.stopPropagation() // doesnt work
editor.find(String.fromCharCode(10))
editor.replaceAll(''); // this work
}
})
您甚至可以从处理程序中删除
if
语句,并在发生任何更改时替换换行符,无论如何。当您找到更改时,您会从光标到所选行的末尾找到一行。为了在此之后取消选择,请使用:
editor.selection.clearSelection()
关于javascript - 单行Ace编辑器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32315244/