Rails选择'其他'选项创建文本字段

时间:2014-05-22 00:05:45

标签: ruby-on-rails ruby-on-rails-4

给出标准选择代码:

<%= f.select :type_name, [['Genomics','Genomics'],['Proteomics','Proteomics'],['Transcriptomics','Transcriptomics'],['Other','Other'] %>

当有人选择“其他”时,有人可以解释如何创建文本字段吗?这样type_name可以是select?

中的选项以外的东西

我意识到这是一个简单的问题,但我还没有找到简明的答案!

2 个答案:

答案 0 :(得分:4)

有很多方法可以做到这一点,但它们都需要JavaScript。我喜欢的一般方法是在表单中放置一个隐藏文本字段,然后将JavaScript事件处理程序附加到select标记,该标记在选择“其他”选项时显示该字段。

以下是script I typically use的要点。它使用数据属性处理JavaScript绑定。将脚本添加到资源中,然后在表单中添加以下内容:

<%= f.select :type_name, [['Genomics','Genomics'],['Proteomics','Proteomics'],['Transcriptomics','Transcriptomics'],['Other','Other'] %>
<%= f.text_field :type_name_other, "data-depends-on" => "#object_type_name", "data-depends-on-value" => "Other" %>

其中#object_type_name是您的下拉列表的HTML ID。

答案 1 :(得分:0)

您需要在附加到的模型f上创建一个attr_accessor(如type_name_other),将text_field添加到最初隐藏的div中的type_name_other的select下面的表单中(在CSS:display:none中),然后创建一个javascript侦听器,用于检测选择表单何时发生更改以及所选择的ansser是否为&#34;其他&#34;显示隐藏字段否则隐藏它。然后,您需要查看type_name_other在处理表单时是否具有值,如果是,则使用它。