`

CodeMirror动态加载和表单提交

 
阅读更多

在使用codemirror时,
其原理是根据form中的textarea标签,自动加载其内容,获得代码行的显示。(具体使用方式参见 codemirror官网使用手册 http://codemirror.net/doc/manual.html

优点显而易见,
在codemirror中,修改了一部分代码,在form表单提交时,codemirror会自动调用其内部的save()方法,将codemirror中的新值,更新至textarea中,进行表单提交。

然而当我们用js动态加载文件,修改后对文件进行保存时出现了出乎意料的情况。

 

<script>
var editor = null;

function loadfile(){
	var fileName = $('#file-selector').val();
	$.get("/load-file?file-name=" + fileName, function(data) {
		$('#lispcode').empty();
		$('#lispcode').text(data);
		$('.CodeMirror').remove();
		editor = CodeMirror.fromTextArea(document.getElementById(\"lispcode\"), {lineNumbers: true});
	});
}
</script>

<form>
	<select id="file-selector" onchange="loadfile()">
		<option>1</option>
		<option>2</option>
	</select>
	<textarea id="lispcode">xxx</textarea>
</form>

<script>editor = CodeMirror.fromTextArea(document.getElementById("lispcode"), {lineNumbers: true}); </script>  //写在textarea之后,加载textarea内容

 

上述动态load文件的代码可以正常显示,但是load过后,修改代码仍然提交的是原来第一次load出来文件的代码。

问题原因: 修改的代码没有正常更新到textarea,以至于form提交时,仍然更新的是原来的旧值。

分析:1. 上述代码在动态load文件内容时,会生成一个新的codemirror实例,但是在form提交时,仍然使用的是初始对象的value值。
思路:1. 由于codemirror在初始化时,会创建一个实例,所以重新加载时考虑销毁旧实例,创建新实例。
解决方案:

editor.toTextArea();
$('#lispcode').empty();
$('#lispcode').text(data);
$('.CodeMirror').remove();
editor = CodeMirror.fromTextArea(document.getElementById(\"lispcode\"), {lineNumbers: true});

 

效果:动态load文件,codemirror不更新。。。

分析:2. 可否动态刷新codemirror中的值
思路:2. 设置codemirror的值
解决方案:

$.get("/load-file?file-name=" + fileName, function(data) {
		$('#lispcode').empty();
		$('#lispcode').text(data);
		editor.getDoc().setValue(data);
                editor.refresh();
});

 

效果:动态load文件,codemirror更新,表单提交时,textarea数据为新值。(问题解决)

1
2
分享到:
评论

相关推荐

    后台layui表单生成器代码复制即用,添加编辑一体,可条件判断

    同时,layui的API接口使得表单的事件处理变得简单,例如监听表单提交、按钮点击等,可以方便地编写相应的业务逻辑。 总的来说,这个"tfForm"压缩包提供了一个基于layui的高效表单生成工具,适用于后台管理系统开发...

    编辑器&日历&表格&表单&表格树&图表

    jQuery Form插件和Bootstrap Form Helper等工具简化了表单验证和提交过程,同时提供了美观的样式和动态效果。 5. **表格树**:表格树是一种将表格和树结构结合的展示方式,适用于层次数据的呈现,如jQGrid或zTree。...

    简易的图书管理系统项目20240410134946

    3. `codemirror` 文件夹:CodeMirror 是一个开源的代码编辑器组件,可能被用在这个项目中作为后台管理界面的代码编辑功能,允许管理员直接编辑图书的元数据或者注释等文本信息。其中包含的不同模式文件(如 `shell....

    fckeditor实现语法高亮和保存功能

    常见的插件如"SyntaxHighlighter Evolved"或"CodeMirror"都可以提供代码高亮支持。安装这些插件通常涉及以下几个步骤: 1. 下载并解压插件文件到FCKeditor的"plugins"目录下。 2. 在FCKeditor的配置文件(fckconfig....

    Web10_OJ-front:在线法官前端

    1. **代码编辑器**:项目可能集成了像CodeMirror或Ace Editor这样的在线代码编辑器,支持多种编程语言,并提供语法高亮、自动补全等功能,便于用户编写和提交代码。 2. **实时编译和评测**:前端可能与后端API接口...

    在textarea输入Tab

    对于更复杂的需求,如语法高亮、自动完成等功能,可以考虑使用外部JavaScript库,如CodeMirror或Ace等。这些库提供了丰富的API和高度定制化的选项,能够极大地提高用户体验。 ### 五、总结 通过以上内容可以看出,...

Global site tag (gtag.js) - Google Analytics