Javascript Ace代码编辑器动态设置语言

Javascript Ace代码编辑器动态设置语言,javascript,jquery,syntax-highlighting,ace-editor,Javascript,Jquery,Syntax Highlighting,Ace Editor,我正试图通过下拉菜单选择语言来实现Ace代码编辑器。我的下拉列表具有模式id。我已经让编辑器正常工作,但是我不能像我希望的那样使用下拉菜单来更改语言。我现在的代码是 var editor = ace.edit("code"); var textarea = $('textarea[name="code"]').hide(); editor.setTheme("ace/theme/textmate"); editor.getSession().setMode("ace/mode/sql"); ed

我正试图通过下拉菜单选择语言来实现Ace代码编辑器。我的下拉列表具有模式id。我已经让编辑器正常工作,但是我不能像我希望的那样使用下拉菜单来更改语言。我现在的代码是

var editor = ace.edit("code");
var textarea = $('textarea[name="code"]').hide();
editor.setTheme("ace/theme/textmate");
editor.getSession().setMode("ace/mode/sql");
editor.getSession().setValue(textarea.val());
editor.getSession().on('change', function(){
textarea.val(editor.getSession().getValue());
});

$('#mode').on('change', function(){
var newMode = $("mode").val();
editor.session().setMode({
    path: "ace/mode/" + newMode,
    v: Date.now()});
});
如上所述,这成功地启动了编辑器,但是我不能从SQL更改语言,SQL是初始语言。我遇到了这个问题 这就是为什么我把它包括在内

v: Date.now()

但还是没有运气

您在
editor.session().setMode({
行)中有一个输入错误

使用
editor.session.setMode(“ace/mode/”+newMode)
代替它

禁用缓存需要使用
v:Date.now()
,您很可能不需要它。

这是正确的 editor.getSession().setMode(“ace/mode/”+newMode);


但是您输入的是editor.session而不是editor.getSession()

谢谢,效果很好。我遇到了第二个错误,即newMode未定义,因此为了解决这个问题,我将var newMode=$(“mode”).val()改为var newMode=$(this).val();记住要确保编辑器var是一个全局变量,在我看到它是一个本地变量之前,我浪费了一些时间试图弄明白为什么这对我不起作用