【问题标题】:Rails: Best way to conditionally show/hide a form field?Rails:有条件地显示/隐藏表单字段的最佳方式?
【发布时间】:2013-08-12 08:20:07
【问题描述】:

我有一个模型 Document,它具有 kindcontext 属性。 Kind 是一个用作枚举的整数(使用出色的 active_enum gem)。上下文仅适用于类型 '2' 的文档,即,如果文档是 2 以外的任何类型,context 将为空白。

所以在创建新Document的表单页面中,我有一个<select>来选择种类,还有一个textarea作为上下文,最初是隐藏的:

<%= form_for @document do |f| %>

  ...  

  <%= f.text_area :context, placeholder: 'Context', style: 'display:none' %>

  <%= f.select :kind, Document.active_enum_for(:kind).to_select %>

  ...

<% end %>

在绑定到下拉列表中的 change() 事件的函数中,使用 jQuery 的 show() 和 hide() 方法显示和隐藏文本区域。

到目前为止,一切都很好。但是在文档的 edit 页面上,我不希望在初始页面加载时 always 隐藏上下文文本区域,因为我们可能正在编辑一种文档 2。因此,如果我们正在编辑类型 2 的文档,我希望最初显示 textarea,但在其他情况下隐藏。

这是我现在拥有的:

<% if @document.kind == 2 %>
  <%= f.text_area :context, placeholder: 'Context' %>
<% else %>
  <%= f.text_area :context, placeholder: 'Context', style: 'display:none' %>
<% end %>

没有更好的方法吗?这对我来说有点罗嗦和多余;有没有办法我可以只打电话给f.text_area 并有条件地包含style: 选项?

还是我想多了?

【问题讨论】:

    标签: ruby-on-rails forms


    【解决方案1】:

    使用这个:

      <%= f.text_area :context, placeholder: 'Context', style: "#{'display:none' if @document.kind == 2}" %>
    

    或者你可以为此添加一个css类,

    display-none{
      display:none;
    }
    
    <%= f.text_area :context, placeholder: 'Context', class: "#{'display-none' if @document.kind == 2}" %>
    

    谢谢

    【讨论】:

    • 我同意内联样式在 99% 的情况下都是一个糟糕的主意,但我认为 "display:none;"对于将要使用 Javascript 隐藏和显示的元素可能是一个例外。
    【解决方案2】:

    或者你可以试试javascript?这是一种减少重复代码的方法,如果你有很多字段要隐藏,这种方法有一些好处。

    <%= f.text_area :context, placeholder: 'Context' %>
    
    <script type="text/javascript">
        $(function(){
            if ($('#document_kind').val() != '2')
                $('#document_context').hide();
        });
    </script>
    

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 2011-12-25
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 2013-07-23
      相关资源
      最近更新 更多