Ruby on rails Rails表单的提交非常奇怪
我有blelow表格Ruby on rails Rails表单的提交非常奇怪,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有blelow表格 <%= 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 => 1
<%= 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"%>
但不管选择什么选项,最后一个文本区域条目都会保存在数据库中。在这种情况下
<%= 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>
为什么不在textarea中使用占位符而不是值
如果问题仍然存在,可能是因为这些字段仍然存在于DOM中。尝试修改jQuery代码以删除那些不显示的字段,而不是隐藏,尽管您在视觉上隐藏了一些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>
我需要一个占位符,作为用户体验的一部分,不删除不起作用。需要占位符吗?逻辑上,必须用于上述目的。你必须保留它以作其他用途吗?很抱歉,我的意思是我需要一个值,而不是一个有点紧张的占位符:如果我通过占位符来实现的话。它提交了一个空表单,那么问题自然会出现在jQuery代码中。从下拉列表中选择后,最后一个文本区域必须仍然存在于DOM中。请选中。它不加载文本框以输入任何文本。文本框最初是隐藏的-它仅在您选择一个选项时显示。如果您不想这样做,只需删除:style=>“display:none;”从declaration.Hmm中,您可以发布文本框的HTML并选择正在呈现的列表吗?很抱歉,我弄乱了js。数组的呈现不好,无法自动填充文本框。
<% 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>