【问题标题】:create form fields on the fly from drop down从下拉菜单中即时创建表单字段
【发布时间】:2014-04-06 08:51:49
【问题描述】:

我什至不明白如何在 google 中搜索我的问题场景。

问题:当用户从下拉列表中进行选择时,以下表单字段应相应更改。

示例:如果用户从下拉菜单中选择“人类”,则 form_fields 下方应显示为“年龄”字段、“种族”字段等。

如果用户从下拉菜单中选择“事件”,下面的表单字段应显示“日期”、“地点”等。

默认情况下,我们会有“提交”按钮。

谁能告诉我如何做到这一点?对 simple_form ruby​​ gem 的任何帮助也会有所帮助。

【问题讨论】:

    标签: ruby-on-rails ruby forms coffeescript


    【解决方案1】:

    您可以使用一些简单的 javascript 来做到这一点。假设您有一个包含以下字段的表单

    <%= f.select :some_field, %w[Human Cat], {}, {:class => 'my-select'}  %>
    
    <div class="human">
      <%= f.label :age %><br>
      <%= f.text_field :age %>
    </div>
    
    <div class="cat" style="display:none;">
      <%= f.label :sub_species %><br>
      <%= f.text_field :sub_species %>
    </div>
    

    现在添加一些 javascript 使其动态

    <script>
      $(".my-select").change(function(){
    if($(".my-select").val() == "Human"){
      $(".human").css('display', 'block');
      $(".cat").css('display', 'none');
    }else{
      $(".human").css('display','none');
      $(".cat").css('display', 'block');
    }
      })
    </script>
    

    【讨论】:

      【解决方案2】:

      使用simple_form gem 和一些简单的javascript 很容易实现。

      查看

      <%= simple_form_for @object do |f| %>
        <%= f.input :attribute_name, :collection => ['Human', 'Event'], :input_html => { :class => 'dropdown' %>
      
        <div class="toggle human" style="display:none;">
          <%= f.input :age %>
        </div>
      
        <div class="toggle event" style="display:none;">
          <%= f.input :date %>
        </div>
      
        <%= f.button :submit %>
      
      <% end %>
      

      这里的关键是用特定的选择器将您要在div 中切换的字段包装起来。

      然后我们在下拉字段中查找更改事件,并相应地切换我们的divs。

      Javascript

      $('.dropdown').change(function() {
        // hide divs first
        $('form .toggle').hide();
      
        // get value from dropdown
        var divClass = $('.dropdown').val().toLowerCase();
      
        // show necessary div
        $('.' + divClass).show();
      });
      

      使用这种方法,您不需要为下拉列表的每个值编写特定大小写,但可以使用下拉列表的小写值作为div 的选择器。

      Here 是一个带有静态标记的简单示例。

      【讨论】:

      • 你能告诉我在哪里将 javascript 保存在 rails 中以利用动态性吗?由于我是 rails 的新手,我不知道在哪里放置 javascript 以便我的视图可以使用它。只是想让你知道我正在使用咖啡脚本和 jquery rails ..
      • 我尝试将您的 javascript 代码粘贴到 assets/javascripts/ 并尝试使用“javascript_include_tag”帮助程序从视图中使用它..但无法获取它
      • 你在正确的轨道上。要在关闭&lt;/body&gt; 之前将javascript 添加到您想要javascript_include_tag 的rails。指向app/assets/javascripts/application.js。然后在app/assets/javascripts/application.js 中可以包含jquery 和其他js 文件。我建议仔细阅读this page 以获得更详细的解释。
      • 你能告诉我 $("form .toggle)" 是做什么的吗?
      • $("form .toggle") 选择包含在form 元素中的类为toggle(句点是类选择器)的所有元素(通用元素的目标是没有选择器——即没有句点)。
      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多