Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails表单的提交非常奇怪_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Rails表单的提交非常奇怪

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

我有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"%>
但不管选择什么选项,最后一个文本区域条目都会保存在数据库中。在这种情况下

<%= 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>