Javascript Rails基于下拉菜单选择填充文本区域
我有一个模型(命名模板),其中包含电子邮件模板;模型只需为模板取一个简短的名称(:name),然后是完整的模板本身(:content)。用户应该能够从下拉列表中选择模板,然后文本区域应该显示模板的内容。这应该在提交表单之前进行 我想我能做到这一点的一种方法是使用jQuery。到目前为止,在我的表单中,我正在检测选择,然后用测试消息填充文本区域。我不知道如何返回到选择并将模板的内容放入文本区域。非常感谢您的帮助 这是我的表格:Javascript Rails基于下拉菜单选择填充文本区域,javascript,jquery,html,ruby-on-rails,templates,Javascript,Jquery,Html,Ruby On Rails,Templates,我有一个模型(命名模板),其中包含电子邮件模板;模型只需为模板取一个简短的名称(:name),然后是完整的模板本身(:content)。用户应该能够从下拉列表中选择模板,然后文本区域应该显示模板的内容。这应该在提交表单之前进行 我想我能做到这一点的一种方法是使用jQuery。到目前为止,在我的表单中,我正在检测选择,然后用测试消息填充文本区域。我不知道如何返回到选择并将模板的内容放入文本区域。非常感谢您的帮助 这是我的表格: <%= form_for :message, :url =>
<%= form_for :message, :url => send_prod_status_path(@incident), :html => {:method => :get} do |f| %>
<div class="field">
<%= f.label :template %> <%= f.collection_select(:template_id, ::Template.all, :id, :name, prompt: "Choose a template") %>
</div>
<script>
$("select").change(function(){
$("textarea").text("Test")
});
</script>
<div class="field">
<%= f.label :prod_status %>
<%= f.text_area :prod_status %>
</div>
<div class="actions">
<%= f.submit "Send ProdStatus" %>
</div>
<% end %>
~
send_prod_status_path(@incident),:html=>{:method=>:get}do | f |%>
$(“选择”).change(函数(){
$(“textarea”).text(“测试”)
});
~
编辑:这是Rails 3.2,如果这很重要的话您有两种方法可以做到这一点:
有两种方法可以做到这一点:
您必须向服务器发出AJAX调用,请求实际的
模板.text
类似(代码简化且未经测试):
您必须向服务器发出AJAX调用,请求实际的
模板.text
类似(代码简化且未经测试):
您需要使用AJAX根据
template\u id
selection从数据库中获取信息您需要使用AJAX根据template\u id
selection从数据库中获取信息这是可行的。虽然我必须做一个新的动作,因为我已经有了这个控制器的表演动作。也许这是一个愚蠢的问题,但这是一种快速而肮脏的方式,还是一种正确的方式来做这类事情?这个解决方案没有任何肮脏之处。您可以使用帮助器重复使用相同的操作并做出不同的响应。@irlrobot检查我的更新以获得无需额外ajax调用的解决方案。再次感谢,非常感谢!这起作用了。虽然我必须做一个新的动作,因为我已经有了这个控制器的表演动作。也许这是一个愚蠢的问题,但这是一种快速而肮脏的方式,还是一种正确的方式来做这类事情?这个解决方案没有任何肮脏之处。您可以使用帮助器重复使用相同的操作并做出不同的响应。@irlrobot检查我的更新以获得无需额外ajax调用的解决方案。再次感谢,非常感谢!
# templates_controller.rb
def show
template = Template.find(params[:id])
render :text => template.content
end
# form.html.erb
<script>
$("select").change(function(){
$.get(
"/templates/" + $("select option:selected").attr("value"),
function(data) {
$("textarea").text(data);
}
);
});
</script>
# form.html.erb
<script>
var templates = [<%= ::Template.all.map(&:to_json).join(",") %>];
$("select").change(function(){
var template_id = $("select option:selected").attr("value");
var template_content = get_template_content(template_id)
$("textarea").text(template_content);
});
function get_template_content(template_id){
// to be implemented ...
return template_content;
}
</script>