0

我有 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 => 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>
4

2 回答 2

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>
于 2013-05-07T18:31:18.453 回答
0

你为什么不使用placeholderintextarea而不是value

<%= f.text_area :text , :rows => 10, :class=>"selectInput", :id=>"2", :style=>"display:none;", :placeholder=>" text for title 2"%>

如果问题仍然存在,可能是因为这些字段仍然存在于您的 DOM 中。尝试将您的 jQuery 代码修改为remove()那些不显示的字段,而不是hide()

于 2013-05-07T18:25:09.763 回答