我有流氓表格选择
<%= f.select(:title, options_for_select([['Pick a reason',{:value => 0}],['Title 2', {:value => 1}], ['Title 3', {:value => 3}])) %>
所以当有人从下拉列表中选择三个选项之一时,使用jquery我会在文本框中渲染三个中的一个。
<%= f.text_area :text , :rows => 10, :class=>"selectInput", :id=>"0", :style=>"display:none;", :value=>" text for pick reason"%>
<%= f.text_area :text , :rows => 10, :class=>"selectInput", :id=>"1", :style=>"display:none;", :value=>" text for title 1"%>
<%= f.text_area :text , :rows => 10, :class=>"selectInput", :id=>"2", :style=>"display:none;", :value=>" text for title 2"%>
但是无论选择什么选项,最后的text_area条目都会保存在数据库中。在这种情况下它
<%= f.text_area :text , :rows => 10, :class=>"selectInput", :id=>"2", :style=>"display:none;", :value=>" text for title 2"%>
我该如何避免?并确保屏幕上显示的内容是保存到数据库的内容。
这也是我的jquery
<script>
$(document).ready(function(){
$('#bashing_title').change(function(){
$(".selectInput").hide();
$("#"+this.selectedIndex).show();
});
});
</script>
答案 0 :(得分:1)
虽然您在视觉上隐藏了几个textarea,但这并不能阻止它们全部被提交 - 并且Rails将使用要序列化的最后一个值。
相反,您应该有一个文本框,并根据所选选项修改内容:
<% text_values = {"text0" => "text for pick reason",
"text1" => "text for title1",
"text2" => "text for title2" } %>
<%= f.text_area :text , :rows => 10, :class=>"selectInput",
:style=>"display:none;", :value => "",
:data => text_values %>
<script>
$(function(){
$('#bashing_title').change(function(){
var textArea = $(".selectInput");
textArea.show().val(textArea.data('text' + this.selectedIndex));
});
});
</script>
答案 1 :(得分:0)
为什么不在placeholder
而不是textarea
中使用value
?
<%= f.text_area :text , :rows => 10, :class=>"selectInput", :id=>"2", :style=>"display:none;", :placeholder=>" text for title 2"%>
如果问题仍然存在,可能是因为这些字段仍存在于您的DOM中。尝试将您的jQuery代码修改为remove()
那些不显示的字段而不是hide()