【问题标题】:How to disable all form_for input fields in Ruby on Rails app?如何禁用 Ruby on Rails 应用程序中的所有 form_for 输入字段?
【发布时间】:2012-11-04 14:16:39
【问题描述】:

我正在尝试稍微干燥一下我的 Rails 应用程序,所以我想在我的 show 视图中呈现一个表单,但禁用所有输入字段。

// show.html.erb

<%= form_for(@project) do |f| %>
  <%= render 'fields', :f => f %>
<% end %>

最好的方法是什么?

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    Javascript

    一种方法是使用 JS 来实现。在显示视图中包含带有特定类的 div

    // show.html.erb
    
    <div class='disable_input'>
      <%= form_for(@project) do |f| %>
        <%= render 'fields', :f => f %>
      <% end %>
    </div>
    

    然后在你的 JS 文件中:

    $('.disable_input :input').prop('disabled', true);
    

    导轨

    如果您想在服务器端实际生成它,您可以将一个变量传递给您的部分,该变量将告诉部分是否必须在每个字段上添加禁用选项。不过,这需要更多的工作!

    使用变量,您可以执行以下操作:

    <%= form_for(@project) do |f| %>
      <%= render 'fields', :f => f, :disabled => true %>
    <% end %>
    

    在局部:

    <% disabled ||= false  
       #We do this so if disabled is not passed to the partial it doesn't crash. 
       # We default it to false 
    %>
    
    <% # Then for all your fields, add disabled: disabled %>
    <%= f.text_field :some_attribute, disabled: disabled %>
    

    表单生成器

    编辑:实际上,避免在任何地方显式传递disabled 的一种方法是创建Custom form builder。有一些很好的资源在谈论它,比如这个:http://johnford.is/writing-a-custom-formbuilder-in-rails/

    在这个例子中,它是为onkeypress 完成的,应该不难适应你的情况!

    【讨论】:

    • 好的,谢谢。使用 jQuery 很容易做到,但如果有人关闭了 Javascript 怎么办。其实我希望有一个更可靠的方法来做到这一点......
    • 编辑了我的答案。想不出更清洁的方法来做到这一点。如果有办法避免将disabled 传递给每个表单元素,那就太好了。
    • 确实,我最终按照您的建议创建了一个表单构建器。感谢您让我走上正轨!
    • 效果如何?您能否在帖子中分享解决方案以帮助未来的读者?谢谢
    • 其实,我刚刚关注了 Ryan Bate 的 form builder tutorial,这对于这个目的来说真的很棒。
    【解决方案2】:

    您可以将所有字段包装在&lt;fieldset disabled&gt;

    // show.html.erb
    
    <%= form_for(@project) do |f| %>
      <fieldset disabled>
        <%= render 'fields', :f => f %>
      </fieldset>
    <% end %>
    

    【讨论】:

    • 这太棒了!
    【解决方案3】:

    你可以使用样式表来做这件事。

    显示操作可能在控制器中,例如“项目”,因此您可能在样式表中有一个文件,其中包含您的控制器名称。

    现在将你的表单包含在一个 div 中的 show.html.erb 中,并给它一个唯一的 id,比如“disable_input”,你不会给任何页面中的任何元素。

    现在禁用此 div 下的 CSS 中的所有输入字段。可以这样写..

    禁用输入输入{
    # 想做什么就做什么
    }

    因此无需编码。

    【讨论】:

    • 他想将disabled 属性添加到每个输入。据我所知,你不能使用 CSS 来做到这一点
    • 是的,我刚刚做了一些研究,没有办法 disable 仅使用 CSS 的 HTML 输入字段。不过会很好!
    • 您不能仅通过使用 CSS 来禁用一个或多个输入,因为它涉及的不仅仅是让它们“看起来”被禁用。
    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多