`

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
分享到:
评论

相关推荐

    codemirror

    **CodeMirror** 是一个强大的、开源的代码编辑器组件,主要应用于网页和Web应用程序中,为用户提供语法高亮、代码自动完成、错误检测等高级功能。这个插件因其易用性和丰富的特性,被广泛赞誉为网络上最好用的代码...

    codemirror下载包

    无论你是开发在线编程学习平台,还是创建代码分享社区,甚至是为个人项目添加代码预览功能,Codemirror 都能成为你的得力助手。通过持续更新和社区支持, Codemirror 保持了其在在线代码编辑领域的领先地位。

    codemirror资源包

    4. **文档**(可能在`docs`或`README`文件中):详细的API文档和指南,有助于深入理解和使用CodeMirror。 5. **其他文件**:可能包含额外的配置文件、测试用例或者插件。 在你的项目中集成CodeMirror,通常需要以下...

    CodeMirror-5.60.0在线代码编辑器

    CodeMirror在线代码编辑器 版本:5.60.0 ...最基本功能,需引入codemirror.js和codemirror.css文件 通过调用CodeMirror.fromTextArea()方法或者 CodeMirror()方法初始化配置。(更多配置见官网)

    codemirror5.59.1

    2. **API 更新**:可能引入了新的 API 和事件,以更好地控制编辑器的行为,比如添加了新的方法来动态改变模式,或者提供了更精细的用户交互回调。 3. **兼容性提升**:CodeMirror 通常会关注浏览器的兼容性,5.59.1 ...

    codeMirror代码格式化(官方demo)

    CodeMirror是一款著名的开源在线代码编辑器,它支持多种编程语言的语法高亮和代码格式化功能。在网页应用中,CodeMirror常被用于提供一个交互式的代码编辑界面,让用户能够直接在浏览器中编写、编辑和格式化代码。这...

    在vue项目中使用codemirror插件实现代码编辑器功能

    在vue项目中使用codemirror插件实现代码编辑器功能(代码高亮显示及自动提示),具体内容如下所示: 1、使用npm安装依赖 npm install --save codemirror; 2、在页面中放入如下代码 &lt;textarea ref=mycode class...

    在线代码编辑器(CodeMirror)

    通常,CodeMirror的主文件名为`codemirror.js`,而语言和主题的配置文件则根据需求单独引入。例如,要支持JavaScript和Python,你需要引入对应的模式文件`mode/javascript/javascript.js`和`mode/python/python.js`...

    codemirror-5.2

    这个"codemirror-5.2"压缩包包含了CodeMirror 5.2版本的所有文件,该版本发布于某个时间点,提供了一些新特性、改进和可能的修复。官方包的下载确保了其可靠性和兼容性,避免了第三方源可能存在的风险。 CodeMirror...

    codemirror-4.2示例代码

    学习使用CodeMirror,首先需要理解其核心API,包括初始化编辑器、获取和设置编辑器内容、添加和移除模式、以及处理用户交互等。此外,CodeMirror还支持插件系统,可以扩展其功能,如行号显示、搜索替换、折叠代码等...

    codemirror.zip

    `codemirror.zip`是一个压缩包,包含了使用和开发`Codemirror`富文本编辑器所需的全部资源。 Codemirror是一款流行的开源JavaScript代码编辑器,它支持多种编程语言的语法高亮,拥有丰富的可定制性,广泛应用于网页...

    文本比对工具-配合CodeMirror使用

    文本比对js-配合 CodeMirror.MergeView方法使用

    Laravel开发-codemirror

    结合 Laravel 的 Blade 模板系统,你可以动态地在页面上生成多个 Codemirror 实例,或者根据后端返回的数据动态配置编辑器。例如,你可能需要根据用户的选择动态切换编辑器的语言模式。 8. **优化与性能** 为了...

    codemirror-5.2(web在线代码编辑器)

    4. **添加插件和功能**:根据需求,你可以加载额外的模式文件(如`mode/java/java.js`)来支持特定语言,或者引入其他插件以增加功能。 ### 4. 示例代码 ```html &lt;!DOCTYPE html&gt; ...

    code mirror - complete

    这个"code mirror - complete"压缩包很可能包含了CodeMirror的所有核心组件和资源,包括CSS样式文件、模式(mode)文件、库(lib)文件、主题(theme)文件以及演示(demo)文件。 1. **CSS**: CSS文件是样式表语言...

    CodeMirror-2.25.zip

    CodeMirror是一款广泛应用于网页开发中的开源代码编辑器,它的主要功能是为网页中的代码片段提供语法高亮显示,提升代码的可读性和编辑体验。在编程教育、在线编程平台、博客文章以及各种Web应用程序中都能看到Code...

    CodeMirror-master

    CodeMirror是一款著名的开源代码编辑器,它以JavaScript编写,可以在网页上实现代码的实时编辑和高亮显示。这个"CodeMirror-master"压缩包文件很可能是CodeMirror项目的源码仓库,通常包含项目的核心代码、示例、...

    基于Flask与CodeMirror的Python在线交互教学平台源码

    项目概述:本项目是一款基于Python的在线交互教学平台,采用...简而言之,此平台通过现代化的Web技术栈,将Flask的简易性与CodeMirror的强大代码编辑功能相结合,打造出一个高效、直观的Python在线学习和教学环境。

    codemirror-graphql, GraphQL模式和CodeMirror的帮助器.zip

    codemirror-graphql, GraphQL模式和CodeMirror的帮助器 用于CodeMirror的 GraphQL模式 为CodeMirror提供一个解析器模式,以及一个live和一个由你的GraphQL架构支持的typeahead hinter 。 正在启动npm install --sa

Global site tag (gtag.js) - Google Analytics