Javascript ace编辑器-传递模式以形成输入
好的,在我的js中,我将输入值设置为js值Javascript ace编辑器-传递模式以形成输入,javascript,ruby,sinatra,erb,ace-editor,Javascript,Ruby,Sinatra,Erb,Ace Editor,好的,在我的js中,我将输入值设置为js值 $('input[name="mode"]').val(editor.session.getMode().$id); 这在我的新视图形式中很好地工作 <form id="snippetForm" action="/snippets/new" method="POST"> <input class="hidden" type="text" name="mode" form="snippetForm"/> </for
$('input[name="mode"]').val(editor.session.getMode().$id);
这在我的新视图形式中很好地工作
<form id="snippetForm" action="/snippets/new" method="POST">
<input class="hidden" type="text" name="mode" form="snippetForm"/>
</form>
但是当我对我的更新表单做同样的操作时
<form id="snippetForm" action="/snippets/<%= @snippet.id %>/edit" method="POST">
<input class="hidden" type="text" name="mode" form="snippetForm"/>
<input id="hidden" type="hidden" name="_method" value="patch">
</form>
解决了问题
我正在设置会话更改的值
editor.getSession().on("change", function () {
$('input[name="mode"]').val(editor.session.getMode().$id);
});
问题是我做出了一个危险的假设,即更改模式被视为会话中的更改事件。经过一些测试后,我注意到它工作了,但只有在提交之前我在编辑器中键入时才起作用。我改成
$(document).click(function() {
$('input[name="mode"]').val(editor.session.getMode().$id);
});
所有的工作都在同一页上吗?尝试命名一个模式1,看看是否可以修复它。不,当它呈现另一个模式不存在时,它们在不同的视图中,我也尝试过重命名:(这是我的第一个想法,可能与jquery准备就绪与dom准备就绪有关。在设置值之前,请尝试在浏览器中设置断点,并查看$('input[name=“mode”]”返回您认为应该返回的值,或者如果此时未定义该值。很抱歉,我是js的新手,不太确定如何进行更新:我做了console.log,它吐出了我想要的内容,所以很好
editor.getSession().on("change", function () {
$('input[name="mode"]').val(editor.session.getMode().$id);
});
$(document).click(function() {
$('input[name="mode"]').val(editor.session.getMode().$id);
});